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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1062閲覧

JFreeChartで、追加した折れ線グラフの色設定等ができない

nakanak

総合スコア22

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/01/15 07:35

編集2023/01/15 07:40

実現したいこと

Java の グラフライブラリ JFreeChart を用いて、赤色折れ線グラフと緑色折れ線グラフを描画しようとしてます。なお、●や◆など記号は表示しないようにします。

発生している問題・エラーメッセージ

サイトを参考にして、下記のソースコードで試していますが、追加した折れ線グラフの色が青で「●」記号を表示します(下記のグラフの青色部分)。緑色に変更する方法、記号を表示しない方法を、ご教示いただきたいです。
イメージ説明

該当のソースコード

Java

1public class XXX { 2 public static void main(String[] args) throws IOException { 3 4 XYSeriesCollection goldPriceCollection = new XYSeriesCollection(); 5 XYSeries goldPriceSeries = new XYSeries("Y軸ラベル"); 6 7 double[][] rateYen = new double[2][180]; 8 int cnt = 0; 9 10 while(…略…) { 11 //データセット作成 12 int targetCount = …略… //DBから値をセット 13 int targetGoldPrice = …略… //DBから値をセット 14 float targetRateYen = …略… //DBから値をセット 15 16 goldPriceSeries.add(targetCount, (double)targetGoldPrice); 17 18 //追加グラフのデータセット作成 19 rateYen[0][cnt] = (double)targetCount; 20 rateYen[1][cnt] = (double)targetRateYen; 21 cnt = cnt + 1 ; 22 23 } 24 25 goldPriceCollection.addSeries(goldPriceSeries); 26 JFreeChart chart = ChartFactory.createXYLineChart( 27 null, 28 "X軸ラベル", 29 "Y軸ラベル", 30 goldPriceCollection, 31 PlotOrientation.VERTICAL, 32 true, 33 true, 34 false 35 ); 36 37 // …略… 38 39 XYPlot xyPlot = chart.getXYPlot(); 40 41 //// 42 //追加グラフ 43 //// 44 DefaultXYDataset rateYenDataSet = new DefaultXYDataset(); 45 rateYenDataSet.addSeries("追加グラフのY軸ラベル", (double[][])rateYen); 46 ValueAxis yAxisYen = new NumberAxis("追加グラフのY軸ラベル"); 47 48 xyPlot.setDataset(1,rateYenDataSet); 49 xyPlot.setRangeAxis(1,yAxisYen); 50 xyPlot.mapDatasetToRangeAxis(1, 1); 51 52 XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); 53 renderer.setSeriesPaint (1,ChartColor.LIGHT_GREEN); // 追加グラフを緑色に設定しようとしているが、実際は青色 54 renderer.setDrawShapes(false); //追加グラフを記号無しにしようとしているが、実際は記号が表示される 55 xyPlot.setRenderer(1,renderer); 56 57 //画像ファイル名生成 58 File imageFile = …略…; // 画像ファイルパスを設定 59 ChartUtilities.saveChartAsJPEG(imageFile, 60 0.5, 61 chart, 62 1000, 63 500) 64 ); 65

補足情報(FW/ツールのバージョンなど)

Java 18
JFreeChart 1.0.19

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

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

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

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

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

jimbe

2023/01/15 08:40 編集

コードが省略され過ぎて、全く実行・確認が出来ません。 出来ればコピペ・実行すれば色が変わっていない等が確認出来る省略状態にして頂けませんでしょうか。 参考にしたサイトも URL をご提示頂ければ、確認が出来ます。 また、 JFreeChart は現在 1.5.3 があります( https://www.jfree.org/jfreechart/ )が、バージョンは上げられないとか制限があるのでしょうか。
guest

回答1

0

ベストアンサー

JFreeChart 1.5.3 を使用して以下確認しました。

実行結果 abc.jpg

java

1import java.awt.Paint; 2import java.io.File; 3import java.io.IOException; 4import java.util.*; 5 6import org.jfree.chart.*; 7import org.jfree.chart.axis.NumberAxis; 8import org.jfree.chart.axis.ValueAxis; 9import org.jfree.chart.plot.PlotOrientation; 10import org.jfree.chart.plot.XYPlot; 11import org.jfree.chart.renderer.xy.StandardXYItemRenderer; 12import org.jfree.chart.renderer.xy.XYItemRenderer; 13import org.jfree.data.xy.*; 14 15public class Main { 16 public static void main(String[] args) throws IOException { 17 Data[] datas = getDatas(180); 18 19 XYSeries xySeries1 = new XYSeries("Int"); 20 XYSeries xySeries2 = new XYSeries("Float"); 21 for(int x=0; x<180; x++) { 22 xySeries1.add(x, datas[x].value1); 23 xySeries2.add(x, datas[x].value2); 24 } 25 26 JFreeChart chart = ChartFactory.createXYLineChart(null, "x", null, null, PlotOrientation.VERTICAL, true, true, false); 27 XYPlot xyPlot = chart.getXYPlot(); 28 29 xyPlot.getDomainAxis().setRange(0, datas.length); 30 31 int i = 0; 32 xyPlot.setDataset(i, createXYDataset(xySeries1)); 33 xyPlot.setRangeAxis(i, createAxis("Int", 80, 180)); 34 xyPlot.mapDatasetToRangeAxis(i, i); 35 xyPlot.setRenderer(i, createXYRenderer(ChartColor.MAGENTA)); 36 37 i++; 38 xyPlot.setDataset(i, createXYDataset(xySeries2)); 39 xyPlot.setRangeAxis(i, createAxis("Float", 500, 2000)); 40 xyPlot.mapDatasetToRangeAxis(i, i); 41 xyPlot.setRenderer(i, createXYRenderer(ChartColor.LIGHT_GREEN)); 42 43 ChartUtils.saveChartAsJPEG(new File("abc.jpg"), chart, 1000, 500); 44 } 45 46 private static XYDataset createXYDataset(XYSeries series) { 47 XYSeriesCollection dataset = new XYSeriesCollection(); 48 dataset.addSeries(series); 49 return dataset; 50 } 51 52 private static ValueAxis createAxis(String label, int lower, int upper) { 53 NumberAxis valueAxis = new NumberAxis(label); 54 valueAxis.setRange(lower, upper); 55 return valueAxis; 56 } 57 58 private static XYItemRenderer createXYRenderer(Paint paint) { 59 StandardXYItemRenderer renderer = new StandardXYItemRenderer(); 60 renderer.setSeriesPaint(0, paint); 61 return renderer; 62 } 63 64 private static class Data { 65 final int value1; 66 final float value2; 67 Data(int value1, float value2) { 68 this.value1 = value1; 69 this.value2 = value2; 70 } 71 } 72 private static Data[] getDatas(int n) { 73 List<Data> list = new ArrayList<Data>(); 74 Random random = new Random(); 75 for(int i=0; i<n; i++) { 76 list.add(new Data(random.nextInt(50)+110, random.nextFloat(500)+1000)); 77 } 78 return list.toArray(new Data[list.size()]); 79 } 80}

投稿2023/01/15 12:24

jimbe

総合スコア12648

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

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

nakanak

2023/01/15 13:03

迅速に回答いただきありがとうございました。こちらでも、教えていただいたコードを参考に修正しましたら、意図通りのグラフを描画できました。ちなみに、JFreeChart 1.5.3 を適用してもよかったのですが、JFreeChart 1.0.19 でも問題ありませんでした。 念のため、当方でも修正したコードを貼付します(抜粋で申し訳ありません)。  //XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();  //renderer.setSeriesPaint (1,ChartColor.LIGHT_GREEN);  StandardXYItemRenderer renderer = new StandardXYItemRenderer();  renderer.setSeriesPaint (0,ChartColor.LIGHT_GREEN);  xyPlot.setRenderer(1,renderer);
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問