Фиксация цвета на точечных графиках в matplotlib - PullRequest
23 голосов
/ 28 мая 2010

Я хочу зафиксировать цветовой диапазон на нескольких точках рассеяния и добавить цветовую полосу к каждому графику (который будет одинаковым на каждом рисунке). По сути, я исправляю все аспекты осей, цветового пространства и т. Д., Чтобы графики были непосредственно сопоставимы на глаз.

Насколько я могу судить, я не могу разобраться во всех различных способах определения цветовой гаммы. Я пробовал vmin, vmax, но он, похоже, ничего не делает, я также пробовал clim (x, y), и это тоже не работает.

Это должно произойти тут и там, я не могу быть единственным, кто хочет сравнивать различные подмножества данных среди графиков ... так, как вы исправляете цвета так, чтобы все данные сохраняли свой цвет между графиками не переназначается на другой цвет из-за изменения макс / мин подмножества -v- всего набора?

Ответы [ 2 ]

43 голосов
/ 28 мая 2010

Установка vmin и vmax должна сделать это.

Вот пример:

import matplotlib.pyplot as plt

xyc = range(20)

plt.subplot(121)
plt.scatter(xyc[:13], xyc[:13], c=xyc[:13], s=35, vmin=0, vmax=20)
plt.colorbar()
plt.xlim(0, 20)
plt.ylim(0, 20)

plt.subplot(122)
plt.scatter(xyc[8:20], xyc[8:20], c=xyc[8:20], s=35, vmin=0, vmax=20)   
plt.colorbar()
plt.xlim(0, 20)
plt.ylim(0, 20)

plt.show()

И сюжет это выдает:

альтернативный текст http://i45.tinypic.com/2qsqvrk.png

0 голосов
/ 31 мая 2010

Хорошо, на самом деле это не ответ, а продолжение. Результаты моего кодирования изменяют код Тома выше. [не уверен, что я хочу снять галочку с ответа, так как приведенный выше код работает и является ответом на вопрос!]

Это не работает для моих данных! Ниже приведен модифицированный код, который можно использовать с моими данными для создания графика, который по какой-то странной причине не работал для меня. Ввод осуществлялся с помощью функций h5py (импорт файла данных hdf5).

В приведенном ниже примере rf85 представляет собой подмножество массивов для большой серии экспериментов, в которых мощность РЧ, подаваемая на систему, составляла приблизительно 85 Вт вперед. Я в основном нарезаю и нарезаю данные различными способами, чтобы попытаться увидеть тенденцию. Это 85 Вт по сравнению с полным набором данных, который является текущим входом (данных больше, но это то, что у меня есть сейчас).

import numpy
import matplotlib.pyplot as plt

CurrentsArray = [array([ 0.83333333,  0.8       ,  0.57142857,  0.83333333,  1.03333333,
        0.25      ,  0.81666667,  0.35714286,  0.26      ,  0.57142857,
        0.83333333,  0.47368421,  0.80645161,  0.47368421,  0.52631579,
        0.36666667,  0.47368421,  0.57142857,  0.47368421,  0.47368421,
        0.47368421,  0.47368421,  0.47368421,  0.61764706,  0.81081081,
        0.41666667,  0.47368421,  0.47368421,  0.45      ,  0.73333333,
        0.8       ,  0.8       ,  0.8       ,  0.47368421,  0.45      ,
        0.47368421,  0.83333333,  0.47368421,  0.22222222,  0.32894737,
        0.57142857,  0.83333333,  0.83333333,  1.        ,  1.        ,
        0.46666667])]

growthTarray = [array([ 705.,  620.,  705.,  725.,  712.,  705.,  680.,  680.,  620.,
        660.,  660.,  740.,  721.,  730.,  720.,  720.,  730.,  705.,
        690.,  705.,  680.,  715.,  705.,  670.,  705.,  705.,  650.,
        725.,  725.,  650.,  650.,  650.,  714.,  740.,  710.,  717.,
        737.,  740.,  660.,  705.,  725.,  650.,  710.,  703.,  700.,  650.])]

CuSearray = [array([ 0.46395015,  0.30287259,  0.43496888,  0.46931773,  0.47685844,
        0.44894925,  0.50727844,  0.45076198,  0.44977095,  0.41455029,
        0.38089693,  0.98174953,  0.48600461,  0.65466528,  0.40563053,
        0.22990327,  0.54372179,  0.43143358,  0.92515847,  0.73701742,
        0.64152173,  0.52708783,  0.51794063,  0.49      ,  0.48878252,
        0.45119732,  0.2190089 ,  0.43470776,  0.43509758,  0.52697697,
        0.21576805,  0.32913721,  0.48828072,  0.62201997,  0.71442359,
        0.55454867,  0.50981136,  0.48212956,  0.46      ,  0.45732419,
        0.43402525,  0.40290777,  0.38594786,  0.36777306,  0.36517926,
        0.29880924])]

PFarray = [array([ 384.,  285.,  280.,  274.,  185.,  185.,  184.,  184.,  184.,
        184.,  184.,  181.,  110.,  100.,  100.,  100.,   85.,   85.,
         84.,   84.,   84.,   84.,   84.,   84.,   84.,   84.,   84.,
         84.,   84.,   84.,   84.,   84.,   27.,   20.,    5.,    5.,
          1.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.,    0.])]

rf85growthTarray = [array([ 730.,  705.,  690.,  705.,  680.,  715.,  705.,  670.,  705.,
        705.,  650.,  725.,  725.,  650.,  650.,  650.])]

rf85CuSearray = [array([ 0.54372179,  0.43143358,  0.92515847,  0.73701742,  0.64152173,
        0.52708783,  0.51794063,  0.49      ,  0.48878252,  0.45119732,
        0.2190089 ,  0.43470776,  0.43509758,  0.52697697,  0.21576805,
        0.32913721])]

rf85PFarray = [array([ 85.,  85.,  84.,  84.,  84.,  84.,  84.,  84.,  84.,  84.,  84.,
        84.,  84.,  84.,  84.,  84.])]

rf85CurrentsArray = [array([ 0.54372179,  0.43143358,  0.92515847,  0.73701742,  0.64152173,
        0.52708783,  0.51794063,  0.49      ,  0.48878252,  0.45119732,
        0.2190089 ,  0.43470776,  0.43509758,  0.52697697,  0.21576805,
        0.32913721])]

Datavmax = max(max(CurrentsArray))
Datavmin = min(min(CurrentsArray))

plt.subplot(121)
plt.scatter(growthTarray, CuSearray, PFarray, CurrentsArray, vmin=Datavmin, vmax=Datavmax, alpha=0.75)
plt.colorbar()
plt.xlim(600,760)
plt.ylim(0,2.5)

plt.subplot(122)
plt.scatter(rf85growthTarray, rf85CuSearray, rf85PFarray, rf85CurrentsArray, vmin=Datavmin, vmax=Datavmax, alpha=0.75)
plt.colorbar()
plt.xlim(600,760)
plt.ylim(0,2.5)

plt.show()

И, наконец, вывод:

colorfailed! http://i50.tinypic.com/21b6c7k.png

Обратите внимание, что это не идеальный результат для моей работы, но я не тратил усилий на то, чтобы сделать ее идеальной. Что важно, однако: точки данных, которые вы узнаете как одинаковые между графиками , не содержат того же цвета , как должно быть в случае, основанном на использовании vmin vmax выше (как предполагает код Тома).

Это безумие. :( Я надеюсь, что кто-то может пролить свет на это для меня! Я уверен, что мой код не так уж и хорош, поэтому, пожалуйста, не беспокойтесь об оскорблении, когда дело доходит до моего кода !!

Дополнительный пакет с горячими горячими сырами для всех, кто может предложить путь вперед. * 1019 Аллен *

ОБНОВЛЕНИЕ - Tom10 уловил проблему - Я случайно использовал неверные данные для одного из моих массивов, в результате чего значения дали уровни цвета, отличные от ожидаемых (т. Е. мои данные были неверны!) Большие реквизиты Тому за это - я бы хотел дать ему еще один голос, но из-за моего способа задать этот вопрос я не могу (извините, Том!)

Пожалуйста, также посмотрите его замечательный пример построения текста на позициях данных, упомянутых ниже.

Вот обновленное изображение, показывающее, что метод Тома действительно работает, и что в моем собственном коде была проблема с графикой: альтернативный текст http://i50.tinypic.com/2ljgh8i.png

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...