Добавление цветной полосы к диаграмме

Если я создам график xy-scatter в Excel и использую Coloring каждую точку диаграммы на основе данных с использованием последовательных или расходящихся цветовых масштабов, чтобы покрасить точки в соответствии с некоторыми данными, как добавить цветную диаграмму в диаграмму, чтобы показать цвет масштаб? Например, как colorbar MATLAB.

Полный пример GitHub: https://github.com/DanGolding/Scatter-plot-with-color-grading-in-Excel


Для этого ответа я предполагаю, что вы использовали последний метод в этом ответе, чтобы покрасить ваши данные. Другими словами, где-то на вашем листе у вас есть список RGB-тройки по 3 столбца, по 1 цвету на строку. Итак, что-то вроде столбцов C-E на этом скриншоте:

введите описание изображения здесь

Стратегия создания цветовой полосы состоит в том, чтобы создать ее на чистом листе, окрашивая фоновые ячейки клеток с очень короткой высотой ряда, чтобы сделать полосу цвета, а затем использовать границу ячейки, чтобы сделать отметки. Этикетки меток будут использовать формулы, чтобы цветная панель была динамичной. Некоторые ячейки сливаются из-за крошечной высоты. Все это автоматизируется следующим макросом. Затем мы создаем связанный образ цветовой полосы и позиции, которые над нашей диаграммой.

Это макрос. Вам нужно сделать пару изменений в зависимости от вашего листа. Например, в этом макросе данные, определяющие окраску (а не сами цвета), находятся в диапазоне Colour Map (Divergent)'!I:I который вам нужно определить max и min вашей цветовой полосы. С расходящимися данными вы можете захотеть сделать эти значения одинаковыми (т. Е. Выбрать абсолютный максимум и отрицательный результат). Он также предполагает, что ваши цветовые триплеты находятся в столбцах CE листа Colour Map (Divergent) .

Запустите этот макрос на новом чистом листе:

 Sub MakeColourBar() 'NB!!! Only run this on a blank sheet! 'NB!!! You need to put the min (Start), max (End) on the sheet yourself manually Range("A260").Value = "Start" Range("D260").Value = "=MIN('Colour Map (Divergent)'!I:I)" Range("A261").Value = "End" Range("D261").Value = "=MAX('Colour Map (Divergent)'!I:I)" Range("A262").Value = "Step" Range("D262").Value = "=(D261-D260)/8" Dim n as integer n = 256 'This assumes there are RGB colour data on another sheet. Change the sheet name and columns below as needed Dim sheetMap As Worksheet Set sheetMap = Worksheets("Colour Map (Divergent)") Dim row As Integer For row = 1 To 256 Range("B" & row + 1).Interior.color = RGB(sheetMap.Range("C" & n - row + 1).Value, sheetMap.Range("D" & n - row + 1).Value, sheetMap.Range("E" & n - row + 1).Value) Next row ActiveWindow.DisplayGridlines = False Rows("2:257").RowHeight = 2 Rows("1:1").RowHeight = 7.5 'This is for the tick mark labels Rows("258:258").RowHeight = 7.5 'This is for the tick mark labels Columns("B:B").ColumnWidth = 2.14 With Range("B2:B257") .Borders(xlEdgeTop).Weight = xlMedium .Borders(xlEdgeRight).Weight = xlMedium .Borders(xlEdgeBottom).Weight = xlMedium .Borders(xlEdgeLeft).Weight = xlMedium End With Range("D1:D6").Merge Range("D1").Value = "=D261" Range("D253:D258").Merge Range("D253").Value = "=D260" 'Merge rows for tick marks Dim mark As Integer For mark = 1 To 8 Range("C" & (mark - 1) * (256 / 8) + 2 & ":C" & (mark) * (256 / 8) + 1).Merge Range("C" & (mark - 1) * (256 / 8) + 2).Borders(xlEdgeTop).Weight = xlMedium 'Make the tick mark labels by merging the 10 cells in column D that center around each tick label If mark > 1 Then Range("D" & (mark - 1) * (256 / 8) + 2 - 5 & ":D" & (mark - 1) * (256 / 8) + 2 + 4).Merge Range("D" & (mark - 1) * (256 / 8) + 2 - 5).Value = "=D" & (mark) * (256 / 8) + 2 - 5 & " + D262" End If Next mark Range("C257").Borders(xlBottom).Weight = xlMedium Columns("C:C").ColumnWidth = 0.42 Columns("D:D").VerticalAlignment = xlCenter Columns("D:D").HorizontalAlignment = xlLeft End Sub 

Это создает на вашем новом листе следующее:

введите описание изображения здесь

Примечание. Я вернул линии сетки для этого изображения, чтобы проиллюстрировать, что здесь происходит. Но для этого, чтобы хорошо работать, вы должны отключить линии сетки, что для вас приведенный выше код. Строки сетки показывают, как цветовая полоска состоит только из столбца ячеек с их цветами фона, настроенными с очень маленькой высотой ряда (столбец B). Ключи производятся с использованием границ ячеек объединенных ячеек (столбец C), а метки меток также используют объединенные ячейки, расположенные вокруг меток (столбец D).

Теперь выделите ячейки B3:D258 нового листа, скопируйте, а затем на листе с патчем вставить в качестве связанного изображения:

введите описание изображения здесь

На диаграмме измените размер области графика, чтобы отобразить некоторое свободное пространство справа от области диаграммы:

введите описание изображения здесь

И затем, наконец, измените размер связанного изображения (убедитесь, что вы сохраняете постоянство аспектности!) И расположите его в этом белом пространстве. Затем вы можете отрегулировать размер шрифта столбца D вашего нового цветного листа, чтобы получить размеры чисел, соответствующие размерам на вашем графике.

Конечный результат:

введите описание изображения здесь

Давайте будем гением компьютера.