- ベストアンサー
【グラフの点の色】一個ごとに色相、彩度、明度で指定
彩度と明度は固定値でも構いません。 X座標 , Y座標 , 色相 8.73 , 4.92 , 4.50 3.19 , 8.03 , 2.98 8.51 , 2.86 , 5.42 7.47 , 1.99 , 7.70 0.74 , 6.80 , 8.47 このようなデータを散布図にプロットしたいのですが、 元データの色相値をプロット一個ごとの色に反映させる方法があれば教えて下さい。 (ExcelまたはOpenOffice)
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>一個ごとに色相、彩度、明度で指定 >彩度と明度は固定値でも構いません。 彩度と明度はどの数値? また固定値とは何を表している? 色相の数値の意味? このあたりが門外漢の私には理解できないんですが、質問にある「色相」を色相環の0度~360度に当てはめてRGBを計算してみました。質問の「色相」の数値が何を表すか理解できないため、「色相」の最大値を「10」として計算しています(最小値は「0」)。違っていれば、VBAの「Const maxShikiso As Integer = 10」の「10」を変更してください。色を付けた結果が添付図です。 また、散布図は、Sheet1にあり、グラフはこの一つのみとしています。X座標、Y座標、色相データは添付図のように配置します。散布図はX座標、Y座標のAB列を選択(表題とデータを)して描いてください。C列の色相はVBAで使っています。なお、添付した散布図の表題、凡例は削除し、X座標、Y座標の最大値は10に修正しています。 下のマクロを下記手順で貼り付けます。 散布図ができたら開発タブ>マクロから、マクロ「paint散布図」を実行してください。点に色が付くはずです。 色が付いた後は個々のデータのX座標、Y座標を変更しても構いませんが、データを追加した場合は元の散布図を削除して散布図を作り直してマクロを再度実行してください。マクロを複雑にしたくないため、グラフは1つとしているためです。 【マクロの貼り付け】 ●「開発」タブをクリックして「Visual Basic」ボタンをクリックします。(または ALTキー+F11キー を押します) ●Microsoft Visual Basic for Applications の画面が開きます。(VBE) ●VBE画面の左にプロジェクト画面が表示されていなかったら、メニューから、表示>プロジェクトエクスプローラーを選択します。 ●プロジェクトエクスプローラーが表示されたら、ツリー表示の「Sheet1」をダブルクリックします。 ●表示された広い画面に回答したコート(「Sub paint散布図() ~ End Sub」になります)をコピーして貼り付けます。 Sub paint散布図() Const maxShikiso As Integer = 10 '色相の最大値 Dim p As Integer '散布図の点のカウンタ Dim Shikiso As Integer '色相を360度に換算 Dim Red As Integer 'RGBの赤 Dim Green As Integer 'RGBの緑 Dim Blue As Integer 'RGBの青 '「色相」の入力範囲の特定 Dim rngShikiso As Range '色相が入力されたセル範囲 Set rngShikiso = Range("C2:C" & Range("C" & Rows.Count).End(xlUp).Row) '散布図はSheet1にあり、グラフは1つのみとする Worksheets("Sheet1").ChartObjects(1).Select With ActiveChart.SeriesCollection(1) For p = 1 To .Points.Count '色相の数値を度数に変換 Shikiso = Int(360 * rngShikiso.Cells(p) / maxShikiso) '色相の度数をRGBに変換 Select Case True Case Shikiso <= 60 '0度~60度 Red = 255: Blue = 0 Green = Int(255 * (Shikiso - 0) / 60) Case Shikiso <= 120 '60度~120度 Green = 255: Blue = 0 Red = Int(255 * (1 - (Shikiso - 60) / 60)) Case Shikiso <= 180 '120度~180度 Red = 0: Green = 255 Blue = Int(255 * (Shikiso - 120) / 60) Case Shikiso <= 240 '180度~240度 Red = 0: Blue = 255 Green = Int(255 * (1 - (Shikiso - 180) / 60)) Case Shikiso <= 300 '240度~300度 Green = 0: Blue = 255 Red = Int(255 * (Shikiso - 240) / 60) Case Shikiso <= 360 '300度~360度 Red = 255: Green = 0 Blue = Int(255 * (1 - (Shikiso - 300) / 60)) End Select '点に色を付ける With .Points(p) .MarkerForegroundColor = RGB(Red, Green, Blue) .MarkerBackgroundColor = RGB(Red, Green, Blue) End With Next End With End Sub
お礼
質問を的確に理解した回答をしてもらえて感謝いたします。 私のソフトはLibre Officeなので、Excel向けの回答を元に実現するつもりでしたが、マクロが必要になるということで、調べるのに時間がかかりお礼が遅くなりました。 その結果、Libre Officeでマクロを使うにはJava実行環境が必要で、そのJavaはセキュリティに問題が多いので、マクロの使用は諦めました。 無料で使えるExcel Onlineもマクロ機能がありません。 せっかく丁寧な回答を頂いたのに生かせず済みませんでした。