• ベストアンサー

C# もっとスマートな書き方教えてください

Chartコントロールを置き、凡例(Series)を6つ設定しています。 一例ですが、こんなふうに書いてるんですが、ループで回すなどもっと良い書き方無いでしょうか? Series SE1 = new Series(); Series SE2 = new Series(); Series SE3 = new Series(); Series SE4 = new Series(); Series SE5 = new Series(); Series SE6 = new Series(); SE1.ChartType = SeriesChartType.Line; SE2.ChartType = SeriesChartType.Line; SE3.ChartType = SeriesChartType.Line; SE4.ChartType = SeriesChartType.Line; SE5.ChartType = SeriesChartType.Line; SE6.ChartType = SeriesChartType.Line; SE1.MarkerStyle = MarkerStyle.Circle; SE2.MarkerStyle = MarkerStyle.Circle; SE3.MarkerStyle = MarkerStyle.Circle; SE4.MarkerStyle = MarkerStyle.Circle; SE5.MarkerStyle = MarkerStyle.Circle; SE6.MarkerStyle = MarkerStyle.Circle; ・ ・ ・

質問者が選んだベストアンサー

  • ベストアンサー
  • luka3
  • ベストアンサー率74% (298/400)
回答No.1

インスタンス作成と初期化を関数化すればいいと思います。 Series CreateSeries() { Series SE = new Series(); SE.ChartType = SeriesChartType.Line; SE.MarkerStyle = MarkerStyle.Circle; … return SE; } Series SE1 = CreateSeries(); Series SE2 = CreateSeries(); Series SE3 = CreateSeries(); Series SE4 = CreateSeries(); Series SE5 = CreateSeries(); Series SE6 = CreateSeries(); パターンを見つけて、そこを関数化します。

nandemoii1234
質問者

お礼

ありがとうございます! 数字だけ変えて、くるくる回せないかと安易に考えてました。

Powered by GRATICA

その他の回答 (1)

new Series(); SeriesChartType.Line; MarkerStyle.Circle; の処理をメソッドにし、戻り値として返す。 SE1~SE6をコレクションに格納し、ループで↑の処理を回す。

関連するQ&A

  • C# 棒グラフの描画について

    2010 express初心者です。 下記のようにCSVからチャートにしたところ、 private void button1_Click(object sender, EventArgs e) { var lines = File.ReadAllLines("test.csv"); var labels = lines[2].Split(','); //これをX軸として使用する var totalVals = lines[3].Split(','); ChartArea area = new ChartArea(); //最初から設定されているシリーズを削除する chart1.Series.Clear(); //支出総額のシリーズ var totalSrs = new Series("総出費"); totalSrs.ChartType = SeriesChartType.Column; //棒グラフ //支出総額のデータ for (int i = 0; i < labels.Length; i++) { var data = new DataPoint(); data.SetValueY(totalVals[i]); // totalSrs.AxisLabel = "総出費"; totalSrs.Points.Add(data); } chart1.Series.Add(totalSrs); //グラフにシリーズを追加 } 画像のようになり困っています。 CSVは  日時,その月の金額,同,,,,,,,,,,,, としています。 表示の改善方法がありましたらご教授ください。

  • VB2010のChartで、何本もの線を書きたい。

    VB2010Expressを使用しています。 Cahrtで2点を結んだ線を何本も書かせていますが、 With Chart1    .Series.Clear()    For m = 1 To Num       .Series.Add(m - 1)       .Series(m -1).ChartType= _       System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line       .Series(m - 1).Points.AddXY(StartY(m), StartX(m))       .Series(m - 1).Points.AddXY(EndY(m), EndX(m))    Next End With このやり方だと線の本数が100本、200本程度までならいいのですが、数百本、1000本になると、 とてつもなく処理(描画?)の時間が掛かるため、以下のように変更してみたのですが、 With Chart1    .Series.Clear()    .Series.Add(0)    .Series(0).ChartType = _      System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line    For m = 1 To Num       .Series(0).Points.AddXY(StartY(m), StartX(m))       .Series(0).Points.AddXY(EndY(m), EndX(m))    Next End With これだと、新しくSeriesを追加しないので時間がかなり速くなるのですが、全ての点がつながって しまいます。 どのようにしたら、線が別々に書けるのでしょうか?

  • チャートコントロール(MSChart)のフォント設定

    VB6.0でチャートコントロール(MSChart)を使いグラフを描画する事が出来ました。グラフを格好良くしようと思い背景を暗めの色にした所、グラフの文字が見えにくくなったため、フォントの変更を試みました。 縦横スケールのフォントは何とか変更することが出来たのですが、凡例のフォント設定が見つかりません。 ご存知の方いらっしゃいましたらご教授頂けないでしょうか。

  • Excel 2007 の質問

    Office 2007 の Excel について、質問が2つほどあります。 ・既存のグラフのx軸とy軸の名前はどのように変えればよいのでしょうか? ・バブルチャートのバブルの大きさ(-2~2までの数字しかとらない)ごとに凡例を作成したいのですが、どのようにすればよいですか。  例) ○ -2 。 -1 .  +1 ●  +2

  • エクセルでレーダーチャートを作成のとき

    エクセルでレーダーチャートを作成しています。 凡例の数が多い為、出来上がったグラフが見にくいです。 見やすくする方法はないでしょうか。 自分で考えているのは、マーカーが付いたレーダーチャートと 塗りつぶしのレーダーチャートを組み合わせて作成したいと思いました。 (例:本社と支店のデータがあり本社を塗りつぶしに、支店をマーカー付き もしくは塗りつぶしなしで表示。としたい。) 作成してみましたが、全部塗りつぶしか全部マーカー付きかしか出来ません。 組み合わせて作ることは可能でしょうか?

  • グラフの設定方法を教えて下さい

    株価グラフを、セル範囲に合わせて横に3個並べて表示させています。 同時に凡例非表示などの条件を設定していますが  1.ローソクの幅(太さ)を広くしたい  2.背景を着色したい この2つの設定が出来ません。何回か挑戦しましたがエラーの壁にはじき飛ばされて 困っています。是非、教えて下さい。 (Win7、エクセル2010) For I = 1 To 3 With ActiveSheet.ChartObjects.Add(Left:=Cells((I - 1) * 4 + 1).Left, _ Top:=Cells(3, 1).Top, Width:=xSize(2), Height:=ySize(2)) With .Chart .SetSourceData Source:=GFDB(4, I), PlotBy:=xlColumns .ChartType = xlStockOHLC '-------------株価グラフ .HasLegend = False '---------------------凡例非表示 .HasAxis(xlValue) = False '-------------Y軸(数値軸)非表示 .HasAxis(xlCategory) = False '---------X軸(項目軸)非表示 End With End With Next I

  • GENERATE_SERIESで二次元を自動生成

    PostgreSQLのGENERATE_SERIESで二次元のテーブルを自動生成したいです。 期待する出力は、 x | y --+-- 1 | 1 2 | 1 3 | 1 1 | 2 2 | 2 3 | 2 1 | 3 2 | 3 3 | 3 1 | 4 2 | 4 3 | 4 です。 自分で思い付いたのは SELECT GENERATE_SERIES(1, 3) AS x, GENERATE_SERIES(1, 4) AS y; ですが、これはもちろん、 x | y --+-- 1 | 1 2 | 2 3 | 3 | 4 を返します…。 ループが必要なんでしょうか…。 例を検索しても見つかりません…。 ストアドプロシージャを使っても構いませんので、 どうかよろしくお願いします。

  • VBA グラフX軸の変更

    A列:X軸(日付) H列:Y軸(値) といったようなグラフを作成するにはどのようなソースで組めばよいのでしょうか? 現在は以下のようなソースまで組めます。 あとは、A列の日付をX軸に設定するだけなのですが、コーディングがわかりません。 --------------------------------------------------------------- Dim chart1 As Chart Set chart1 = Charts.Add 'H列グラフ化 chart1.SetSourceData Worksheets("Sheet1").Range(Cells(ROWINI, COLRUI), Cells(iend, COLRUI)) chart1.ChartType = xlLineStacked chart1.HasLegend = False --------------------------------------------------------------- どなたかアドバイスいただければ幸いです。

  • MSChartでX軸のデータを0から描きたい

    C#でMSChartで表を作成しています。 開発環境はワケあってVisualStudio2005。 チャートの種類は「Spline」です。 VS2005なのでツールボックスにMSChartはなく、プロパティウインドウも無いので直接C#で書いています。 やりたいのは、たとえば0~100のデータを描く際、  chartArea1.AxisX.Interval = 10;  chartArea1.AxisX.Maximum = 100;  chartArea1.AxisX.Minimum = 0; Series mode1 = new Series(); mode1.ChartType =(SeriesChartType)4; for (i=0; i=<100; i++) { mode1.Points.Add(data1[i]); } chart1.Series.Add(mode1); とすればX軸のラベルは"0","10",・・・"100"で、実際にはX=1の位置から100まで線が描かれますが、for文のとおり、実はデータは0~100の101個あり、X=0の位置(Y軸にくっついた位置)から100まで線を引きたいのです。  chartArea1.AxisX.Maximum = 101;  chartArea1.AxisX.Minimum = 1; とすればY軸にくっついた状態で線が描かれますが、X軸のラベルも"1","11",・・・となってしまい、ラベルを"0"からにする方法も探しかたが悪いのか、わかりませんでした。 「Spline」で線をX=0の位置から描く方法、または「chartArea1.AxisX.Minimum = 1;」でX軸のラベルを"0"からにする方法、どちらでもいいのでご教示いただきたく質問いたしました。 (そもそも無理なのでしょうか?) ちなみに、X軸方向の最大は可変で、それに対して10分割にしてIntervalを決めているので、実際にはX軸のラベルは"10","20"・・・のような値ではなく"13","26"・・・となることもあります。 よろしくお願いします。

  • chart.js4系で凡例をカスタマイズする方法

    今回、chart.jsの2系から4系に変更するにあたり下記の多重円のサンプルで以前から気になっていた系列を利用した凡例の■(以前は濃いグレー)を黒からそれぞれ任意の色に出来ないかと思い悩んでいましたが、米国のあるQ&Aサイトに載っていた方法(前に投稿しましたが削除済み)等試しましたがそこまでしなくても単にfontColorをreturn内で指定するだけで出来ました(下記コード)。 しかしこの方法でもボックス部分とテキストを含めた凡例全体の色が変わりました。今回はpinkで指定したところ、テキストの色がpinkでは見た目が鮮明とはいえません。やはり、テキストとボックス部分で別の色の出来ないかと思いまして、何か解決方法があればお教えください。 <script> const CHART_COLORS = {'赤': 'rgb(230,0,18)','プラム': 'rgb(221,160,221)','マゼンタ': 'rgb(228,0,127)','スカイブルー': 'rgb(160,216,239)','紫': 'rgb(146,7,131)','緑': 'rgb(0,153,68)','ゴールド': 'rgb(255, 215, 0)' }; const ctx = document.getElementById("myPieChart"); const myPieChart = new Chart(ctx, { type: 'pie', data: { labels: ['Jan','Feb','Mar','Apr','May','June'], // X軸のラベル datasets: [ { label: 'NY', data: [32, 59, 40, 42, 38, 25],backgroundColor: Object.values(CHART_COLORS), tension: 2,fill: false}, { label: 'LA', data: [52, 45, 38, 28, 59, 40],backgroundColor: Object.values(CHART_COLORS), tension: 2,fill: false}, { label: 'CHI', data: [65, 23, 48, 60, 62, 70],backgroundColor: Object.values(CHART_COLORS), tension: 2,fill: false} ] }, options: { responsive: false, // canvasサイズ自動設定機能を使わない。HTMLで指定したサイズに固定 plugins: { legend: { // 凡例 display: true, // 表示の有無 position: 'bottom', // 表示位置 labels: { generateLabels: function(chart) { return chart.data.datasets.map(function(datasets, i) { return { fontColor: 'pink', //凡例の色を指定 datasetIndex: i, text: datasets.label, fillStyle: datasets.backgroundColor, strokeStyle: datasets.borderColor, // 表示状態に連動して取り消し線表示 hidden: !chart.isDatasetVisible(i), }; }); } }, onClick: function(e, legendItem){ const index = legendItem.datasetIndex; const ci = this.chart; const meta = ci.getDatasetMeta(index); meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null; ci.update(); } } } } }); </script> さらに欲を言えば「labels: ['Jan','Feb', 」等を使ったデフォルトの凡例も別位置に配置出来ないかと考えています。なお、デフォルト凡例と <button・・でで作った凡例の両方操作できる方法は、このサイトで以前(https://okwave.jp/qa/q9820330.html)教えてもらっています。 どうかよろしくお願いいたします。 また、同じような内容で投稿、削除を繰り返し行っていることお許しください。

専門家に質問してみよう