我正在尝试更改使用 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
类似问题的讨论。任何帮助将不胜感激。
最佳答案
这是部分答案。只是第一个没有标记的图,并且在没有错误线的同一个图上。
关于股票代码,this post建议:
ax=plt.gca()
ax.xaxis.set_minor_formatter(ticker.ScalarFormatter())
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
演示代码:
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)
ax=plt.gca()
ax.xaxis.set_minor_formatter(ticker.ScalarFormatter())
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
plt.errorbar(Temps,Powers,xerr=Errors,ecolor=makecolour(Temps),fmt='.',markersize=0)
plt.errorbar(Temps,Powers,xerr=None,fmt='.')
plt.show()
关于python - Pyplot errorbar 无法传递颜色数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58776466/