Я пытаюсь изменить внешний вид диаграммы, созданной с помощью plt.errorbar
, но не могу изменить ее так, как мне бы хотелось.
Чтобы продемонстрировать проблему, я составилнекоторые примеры данных:
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import matplotlib.axes as axes
import numpy as np
Temps=np.array([18000,15000,14000,12000,11750,11500,10000,5750,6000])
Powers=np.array([1.2,1.0,0.5,.35,0.4,0.2,.15,5.3,4.9])
Errors=100*np.array([2,2,2,2,2,2,2,3,3])
У меня есть функция, которая преобразует значения температуры в цвета:
def makecolour(t):
a=(t-min(Temps))/(max(Temps)-min(Temps))
return [[1-A,0,A] for A in a]
Я также изменил некоторые другие свойства диаграммы.
plt.axes(facecolor='black')
plt.yscale('log')
plt.xscale('log')
plt.xlim(2e4,5e3)
plt.errorbar(Temps,Powers,xerr=Errors,ecolor=makecolour(Temps),fmt='.')
Я не могу заставить точки данных изменить цвет, только полосы ошибок. Когда я пытаюсь изменить цвет фактических точек:
plt.errorbar(Temps,Powers,xerr=Errors,ecolor=makecolour(Temps),fmt='.',color=makecolour(Temps))
"Breaks because it fails to interpret the array of colours."
Это не работает, и я не знаю, как это исправить. Самое близкое решение, которое я нашел, - полностью скрыть точки данных:
plt.errorbar(Temps,Powers,xerr=Errors,ecolor=makecolour(Temps),fmt='.',markersize=0)
"Not showing where the data point is isn't acceptable."`
Но это недостаточно хорошо.
Я также боролся с тем, как отображаются тики осей, когдаиспользуя plt.xscale('log')
. В идеале я хочу отображать метки в виде простого целого числа, а не научного обозначения, но ни одно из решений, которые я пробовал, не сработало. Я попытался:
ticker.LogFormatter(base=1)
axes.ticklabel_format(style='plain')
Я искал здесь ответы на предыдущие вопросы, но я не нашел никаких рассуждений о подобных проблемах с plt.errorbar
. Любая помощь будет высоко ценится.