Установка цветовой шкалы в ipython - PullRequest
2 голосов
/ 20 сентября 2009

Я новичок в Python и не могу найти правильный синтаксис для использования. Я хочу нанести некоторые данные о сверхновых на проекцию молота. Данные имеют координаты альфа и бета. Для каждой точки данных также имеется значение дельта, описывающее свойство SN. Я хотел бы создать цветовую гамму, которая варьируется от мин. значение дельта до макс. Значение дельты и переходит от красного к фиолетовому. Это означало бы, что когда я пришел к графику данных, я мог просто написать:

подзаговор (111, проекционное = "молот")

р = участок ([альфа], [бета], 'о', тк = 'дельта')

где дельта будет представлять цвет где-то в спектре между красным и фиолетовым. Т.е. если delta = 0, маркер будет красным, а если delta = delta max. маркер будет фиолетовым, и если delta = (delta. max) / 2, маркер будет желтым.

Может ли кто-нибудь помочь мне с синтаксисом сделать это?

Большое спасибо

Angela

Ответы [ 3 ]

2 голосов
/ 20 сентября 2009

Если вы думаете о таблице фиксированных цветов, просто отобразите свои значения дельты в диапазон индекса для этой таблицы. Например, вы можете построить таблицу цветов с именами цветов, распознаваемыми вашим пакетом печати:

>>> colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet']

Диапазон возможных значений delta, из вашего примера, составляет от 0 до delta.max. Сопоставление с длиной таблиц цветов дает step:

>>> step = delta.max / len(colors)

И вычисление, необходимое для получения имени цвета, соответствующего данной точке data:

>>> color = colors[math.trunc(data / step)]

Этот метод работает для любого набора предварительно выбранных цветов, например, значения RGB, выраженные в шестнадцатеричных числах.

Обнаружен быстрый поиск в Google Библиотека Python Джонни Линя . Он содержит цветных карт , в том числе Rainbow (red to violet, 790-380 nm). Вам также понадобится его wavelen2rgb.py (рассчитать значения RGB с учетом длины волны видимого света). Обратите внимание, что эта библиотека генерирует цвета в виде RGB-триплетов - вам нужно выяснить, как ваша библиотека черчения ожидает такие значения цвета.

1 голос
/ 21 сентября 2009

Используя функцию wavelen2rgb библиотеки Python Джонни Линя (как предположил Гимел), следующий код отображает SN в виде закрашенных кружков. Код использует Tkinter, который всегда доступен с Python. Вы можете получить wavelen2rgb.py здесь .

def sn():
    "Plot a diagram of supernovae, assuming wavelengths between 380 and 645nm."
    from Tkinter import *
    from random import Random
    root = Tk()                 # initialize gui
    dc = Canvas(root)           # Create a canvas
    dc.grid()                   # Show canvas
    r = Random()                # intitialize random number generator
    for i in xrange(100):       # plot 100 random SNs
        a = r.randint(10, 400)
        b = r.randint(10, 200)
        wav = r.uniform(380.0, 645.0)
        rgb = wavelen2rgb(wav, MaxIntensity=255)  # Calculate color as RGB
        col = "#%02x%02x%02x" % tuple(rgb)        # Calculate color in the fornat that Tkinter expects
        dc.create_oval(a-5, b-5, a+5, b+5, outline=col, fill=col) # Plot a filled circle
    root.mainloop()
sn()

Вот выход:

альтернативный текст http://img38.imageshack.us/img38/3449/83921879.jpg

1 голос
/ 20 сентября 2009

Я не знаком с черчением, но хороший способ генерирования цветов радуги - использование цветового пространства HSV (оттенок, насыщенность, значение). Установите насыщенность и значение на максимальные значения и измените оттенок.

import colorsys

def color(value):
    return colorsys.hsv_to_rgb(value / delta.max / (1.1), 1, 1)

Это даст вам тройки RGB для цветов радуги. (1.1) заканчивается на фиолетовом в delta.max вместо того, чтобы возвращаться к красному. Таким образом, вместо выбора из списка, вы вызываете функцию.

Вы также можете попробовать поэкспериментировать с насыщенностью и значением (1 в функции выше), если возвращаемые цвета слишком яркие.

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