LoginSignup
2
2

C#でグラフを書く方法

Last updated at Posted at 2024-04-13

グラフを書きたいが

Chartが追加できない!
image.png
右クリック「すべて表示」にすると存在することはわかるんだが、追加できない!

原因:LiveChartはNET6.0ではおそらく使えません。Windowsフォーム用ではないからかもしれませんが・・・

OxyPlotを使おう

image.png

image.png

プロットする

using
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);

透明色は存在する?

BackColorOxyPlot.Colors.Transparentにしても透過しない・・・
image.png

曲線の色を変更

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で指定する

背景に画像を指定する

ここで、BackColorOxyPlot.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;
        }
    }
}

image.png

画像サイズは考慮されないため、リサイズが必要だね。
ChatGPTで解決!(著作権的に載せられません)

(以下、OxyPlot以外の内容)

フォームの背景を透明にする

フォーム全体にpictureBoxをつける
image.png

pictureBoxの色を透明色キー色にすることで透明にする

this.TransparencyKey = Color.Green;
this.pictureBox1.BackColor = Color.Green;

なぜか、青とかだとできない。理由不明

this.TransparencyKey = Color.Blue; // 透明な色を透過色として設定
this.pictureBox1.BackColor = Color.Blue;

フォーム内にフォームをいれる方式の場合で、背景を透明にする

内部フォームの透明化:前述の方法で可能
親フォーム側の透明化:前述の方法で可能
内部フォームのみ透明化:不可(親側も透けてしまう)

image.png

配列の要素の追加

Appendは本体に追加されない!Addを使うと良い

//宣言
private List<float> array;
//生成
array = new List<float>();
//追加
array.Add(data);

(追記)
ChatGPT有能すぎる!
ネットにない情報(おそらく海外)を持ってきてくれるから、めっちゃらくだ!
というか、関数そのまま使えたりするのやばい。工数がめっちゃ減る

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2