質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

2282閲覧

[WPF] OxyPlot グラフ項目名に文字列を使う方法

kuniyan

総合スコア13

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/03/12 23:47

編集2019/03/13 08:01

OxyPlotを使用して、折れ線グラフを描写するアプリを作成しているのですが、
X軸の項目に文字列を使う方法がわかりません。

今までは、日付をX軸に持ってきていたので、DateTimeAxisを使用すれば簡単に出来ていたのですが、、、

何かいい方法がありましたら、教えていただければ幸いです。

-- 現在

C#

1 class Data 2 { 3 public double ID { get; set; } 4 public DateTime date { get; set; } 5 public string Items { get; set; } 6 public double Value1 { get; set; } 7 public double Value2 { get; set; } 8 }

C#

1 class Test 2 { 3 public ReactiveCollection<Data> Datas { get; } = new ReactiveCollection<Data>(); 4 5     public void GePlots() 6 { 7 // テスト用にデータを入れる 8 for (int i = 0; i < 5; i++) 9 { 10 var item = "XXXX" + i.ToString(); 11 double v1 = 52.0 + i; 12 double v2 = 61.0 + i; 13 int i2 = i + 1; 14 string dt = "2019/01/0" + i2.ToString(); 15 Datas.Add(new Data { ID = i, date = DateTime.Parse(dt), items = lot, Value1 = v1, Value2 = v2 }); 16 } 17 18 19 var plotTest = new PlotModel() 20 { 21 PlotAreaBorderColor = OxyColors.LightGray, 22 TextColor = OxyColors.LightGray 23 }; 24 25  // OxyPlot X軸 26 var axisX = new LinearAxis() 27 { 28 Title = "Time", 29 Position = AxisPosition.Bottom, 30 TickStyle = TickStyle.None, 31 MajorGridlineStyle = LineStyle.Solid, 32 MajorGridlineColor = OxyColors.Gray, 33 StringFormat = "yyyy/MM/dd", 34 Angle = -90 35 }; 36 37 // OxyPlot Y軸 38 var axisY = new LinearAxis() 39 { 40 Title = "Values", 41 Position = AxisPosition.Left, 42 TickStyle = TickStyle.None, 43 MajorGridlineStyle = LineStyle.Solid, 44 MajorGridlineColor = OxyColors.Gray, 45 MinorGridlineStyle = LineStyle.Dot, 46 MinorGridlineColor = OxyColors.Gray 47 }; 48 49 50 plotTest.Series.Add(new LineSeries() 51 { 52 53 Title = "Value1", 54 ItemsSource = Datas, 55 DataFieldX = "date", 56 DataFieldY = "Value1", 57 //MarkerType = MarkerType.Circle, 58 MarkerSize = 3, 59 //MarkerStroke = OxyColors.Red, 60 MarkerStrokeThickness = 1, 61 //MarkerFill = OxyColors.Red, 62 //Color = OxyColors.Red, 63 IsVisible = chkPT201.Value, 64 RenderInLegend = true 65 }); 66 67 plotTest.Series.Add(new LineSeries() 68 { 69 Title = "Value2", 70 ItemsSource = Datas, 71 DataFieldX = "date", 72 DataFieldY = "Value2", 73 //MarkerType = MarkerType.Circle, 74 MarkerSize = 3, 75 //MarkerStroke = OxyColors.Red, 76 MarkerStrokeThickness = 1, 77 MarkerFill = OxyColors.Red, 78 //Color = OxyColors.Red, 79 IsVisible = chkPT201.Value, 80 RenderInLegend = true 81 }); 82 } 83 }

(適当で申し訳ありません)
イメージ説明

-- 理想
各LineSeriesの DataFieldXに"Items"の項目(XXXX0-4)を表示するのが理想です。
LabelFormatterを使おうと考えましたが案の定できませんでした。。
また、LinearAxis以外の軸も試してみましたが、文字列が許容されていそうなものは見当たりません。
この程度の情報で申し訳ありませんがよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takabosoft

2019/03/13 02:29

これはどういう見た目になるのか参考画像を貼ってもらった方が良い気がします。
kuniyan

2019/03/13 08:03

takabosoftさん コードと現在の画像を張らせていただきました。 現在、日付が表示されている箇所に、"Items"の項目が表示されるのが理想です。
guest

回答1

0

ベストアンサー

普通にLinearAxisで良いのでは?

LabelFormatter を指定するのはどうですか?
以下の例だと値の内容によっては空文字になってしまいますが。
(工夫次第でなんとかなると思いますが)

C#

1var axisX = new DateTimeAxis() 2{ 3 Title = "Time", 4 Position = AxisPosition.Bottom, 5 TickStyle = TickStyle.None, 6 MajorGridlineStyle = LineStyle.Solid, 7 MajorGridlineColor = OxyColors.Black, 8 Angle = -90, 9 LabelFormatter = (x) => 10 { 11 var dt = DateTimeAxis.ToDateTime(x); 12 return Datas.FirstOrDefault(d => d.date == dt)?.Items; 13 } 14 15}; 16plotTest.Axes.Add(axisX);

投稿2019/03/13 01:14

編集2019/03/14 00:52
ebiryo

総合スコア797

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuniyan

2019/03/13 01:45

回答ありがとうございます。 LinearAxisでは、ItemsSourceをStringにすると"入力文字列の形式が正しくありません"と出てしまいます。 StringFormat で何か上手いことできるのでしょうか。
ebiryo

2019/03/13 02:12 編集

情報が少なすぎて何ともいえません。 回答になっていませんが、OxyPlotのサンプルは山ほどあるのですから参考にされてはいかがですか?
kuniyan

2019/03/14 05:37

なるほど! ラムダ式ですか。盲点でした。Funcを使用することにとらわれていました。 あとは、自分なりにやりたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問