Задать вопрос
Jeilla
@Jeilla

Можно ли сделать интерполяцию в методе scatter?

Есть список температур, которые визуализируются в полярных координатах, цвет соответствует температурному значению. Нужно сделать интерполяцию, чтобы рассчитывались промежуточные значения цветов между точками.
Можно ли сделать это с методом scatter?
Или как реализовать при помощи метода imshow? Заменить точки на другой геометрический объект?

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

#температурные значения
data = [36.1, 33.2, 34.6, 35.3, 34.1, 32.9, 35.6, 36.7]  

#количество точек
N = 8.   

#координаты
r = [1, 1, 1, 1, 1, 1, 1, 1]
theta = [0, 0.78, 1.58, 2.36, 3.15, 3.94, 4.73, 5.5]

area = 800
colors = ["#1f3a93", "#55bed7", "#75af1c", "#fce032", "#e73e33"]

fig = plt.figure()
ax = fig.add_subplot( projection='polar')

i = 0
# вызываем рисование графика
c = ax.scatter(theta, r,
            # цвет присваиваем в зависимости от значения data[i] c = [colors[индекс] по условию плюс цикл по data]
        c = [colors[0] if a < 31.0 else colors[1] if 32.5 <= a < 34.5 else colors[2] if 34.5 <= a < 35.5 else colors[3] if 35.5 <= a < 36.5 else colors[4] for a in data ], s=area, cmap='hsv', alpha=1)
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Средний 8 комментариев
Решения вопроса 1
@dmshar
Уточните-ка свою хотелку.
Есть температуры. Понятно. Им соответствуют цвета. Тут уже вопрос. Цвета, те которые colors - они вам жестко заданы или вы их сами задали?
"Интерполяция с промежуточными значениями цветов между точками" совсем непонятно.
Так как у вас заданы цвета - на самом деле в трехмерном пространстве RGB, то для каких "промежуточных точках" вы хотите сделать интерполяции?
Если задача мной правильно понята, то у вам на самом деле надо делать интерполяцию температур в промежуточных точках, а уже их значения представлять соответствующим цветом. Но тогда цвета температур надо задавать не от фонаря, а по некоторому алгоритму. Ну например, вот так:

data = [36.1, 33.2, 34.6, 35.3, 34.1, 32.9, 35.6, 36.7]  
rgb = [int(i*10) for i in data] 
c = ax.scatter(theta, r,
        c = rgb, 
        s=area, cmap='hsv', alpha=1)


После этого находите (интерполируете или еще как - тут уж вам виднее) температуру в нужной вам точке, переводите ее по той-же формуле в цвет и рисуете.

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

Войдите, чтобы написать ответ

Похожие вопросы