как раскрасить полярную диаграмму в соответствии с ее средним - PullRequest
2 голосов
/ 08 октября 2019

Я вычеркнул некоторые данные в полярной последовательности для классификации. Ниже приведено одно из изображений enter image description here

Результаты классификации не соответствуют ожидаемым. Теперь я хочу посмотреть, смогу ли я отметить значения выше и ниже среднего, как показано в следующем ожидаемом результате. enter image description here

Это код для графика, который у меня есть на данный момент ...

theta = np.arange(0, 360 + 360 / 144, 360 / 144) * np.pi / 180
fig1 = plt.figure()
ax1 = fig1.add_axes([0.1, 0.1, 0.8, 0.8], polar=True)
ax1.set_ylim(0, 4500)
ax1.set_yticks(device_dict[name])
ax1.plot(theta, inter_data)

Как получить желаемый результат?

после построения графика согласно ответу. enter image description here

между цветом есть пробелы. это потому, что следующая точка данных не удовлетворяет условию, но есть ли способ ее исправить?

1 Ответ

3 голосов
/ 08 октября 2019

Вот пример. Сначала вам нужно вычислить среднее значение, а затем сделать его вектором для построения графика, а затем использовать функцию fill_between для затенения ваших данных следующим образом.

import numpy as np
from matplotlib import pyplot as plt

theta = np.arange(0, 360 + 360 / 144, 360 / 144) * np.pi / 180

#Note that I have to make my own 'inter_data'
inter_data = (theta-np.pi/2.)*np.cos(theta)**2

#Calculate the mean, then multiply by vector of ones with same size as theta
inter_mean = np.nanmean(inter_data)*np.ones(len(theta))


fig1 = plt.figure(figsize=(8,8))
ax1 = fig1.add_axes([0.1, 0.1, 0.8, 0.8], polar=True)

ax1.plot(theta, inter_data,c='C0') #Plot the data

ax1.plot(theta, inter_mean,c='k')   #Plot the mean

#Shade only the positive values where the data is greater than the mean red
ax1.fill_between(theta,inter_data,inter_mean,facecolor='red',alpha=.7,where=(inter_data-inter_mean)>0)

#Shade only the negative values where the data is less than the mean
ax1.fill_between(theta,inter_data,inter_mean,facecolor='yellow',alpha=.7,where=(inter_data-inter_mean)<0)

plt.show()

enter image description here

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