グラフを書きたいが
Chart
が追加できない!
右クリック「すべて表示」にすると存在することはわかるんだが、追加できない!
原因:LiveChartはNET6.0ではおそらく使えません。Windowsフォーム用ではないからかもしれませんが・・・
OxyPlotを使おう
プロットする
using OxyPlot.Axes;
using OxyPlot.Series;
using OxyPlot;
//内部メンバ
private LineSeries line;
private LinearAxis X;
private LinearAxis Y;
//コンストラクタ処理
this.graph.Model = new PlotModel();
X = new LinearAxis()
{
IsAxisVisible = false,
AxislineColor = OxyColors.White
};
Y = new LinearAxis();
X.Position = AxisPosition.Bottom;
Y.Position = AxisPosition.Left;
graph.Model.Axes.Add(X);
graph.Model.Axes.Add(Y);
line = new LineSeries()
{
Color = OxyColors.Blue,
LineStyle = LineStyle.Solid,
StrokeThickness = 1
};
graph.Model.Series.Add(line);
graph.Model.Background = OxyColors.White;
graph.InvalidatePlot(true);
line.Points.Add(new DataPoint(x,y));
点を追加することで折れ線グラフの点が増えていく
背景色を変更
this.graph.Model.Background = OxyColor.FromRgb(color.R, color.G, color.B);
背景色を透明にする
//コンストラクタ内
this.TransparencyKey = Color.Blue;
//背景色設定関数
public void set_back_color(Color color)
{
this.graph.Model.Background = OxyColor.FromRgb(color.R, color.G, color.B);
}
//透明化する
set_back_color(Color.Blue);
透明色は存在する?
BackColor
をOxyPlot.Colors.Transparent
にしても透過しない・・・
曲線の色を変更
this.line.Color = OxyColor.FromRgb(color.R, color.G, color.B);
軸の色変更
今のところできない・・・
要素を追加する
line.Points.Add(new DataPoint(x, y));
要素をクリアする
line.Points.Clear();
曲線を太くする
public void set_thickness(double thickness)
{
this.line.StrokeThickness = thickness;
}
douleで指定する
背景に画像を指定する
ここで、BackColor
をOxyPlot.Colors.Transparent
にする効果が現れるぜ
public void set_back_img(Image img)
{
this.graph.Model.Background = OxyColors.Transparent;
this.graph.BackgroundImage= img;
}
private void back_img_Click(object sender, EventArgs e)
{
string ret = string.Empty;
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Title = "フォーム背景画像選択ダイアログ";
openFileDialog.Filter = "Image File(*.bmp,*.jpg,*.png,*.tif)|*.bmp;*.jpg;*.png;*.tif|Bitmap(*.bmp)|*.bmp|Jpeg(*.jpg)|*.jpg|PNG(*.png)|*.png";
openFileDialog.InitialDirectory = @"C:\";
//ファイル選択ダイアログを開く
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
ret = openFileDialog.FileName;
System.Drawing.Image img = System.Drawing.Image.FromFile(ret);
graph_display.set_back_img(img);
back_img_pass = ret;
}
}
}
画像サイズは考慮されないため、リサイズが必要だね。
ChatGPTで解決!(著作権的に載せられません)
(以下、OxyPlot以外の内容)
フォームの背景を透明にする
pictureBoxの色を透明色キー色にすることで透明にする
this.TransparencyKey = Color.Green;
this.pictureBox1.BackColor = Color.Green;
なぜか、青とかだとできない。理由不明
this.TransparencyKey = Color.Blue; // 透明な色を透過色として設定
this.pictureBox1.BackColor = Color.Blue;
フォーム内にフォームをいれる方式の場合で、背景を透明にする
内部フォームの透明化:前述の方法で可能
親フォーム側の透明化:前述の方法で可能
内部フォームのみ透明化:不可(親側も透けてしまう)
配列の要素の追加
Appendは本体に追加されない!Addを使うと良い
//宣言
private List<float> array;
//生成
array = new List<float>();
//追加
array.Add(data);
(追記)
ChatGPT有能すぎる!
ネットにない情報(おそらく海外)を持ってきてくれるから、めっちゃらくだ!
というか、関数そのまま使えたりするのやばい。工数がめっちゃ減る