Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyplot errorbar无法传递颜色数组_Python_Matplotlib - Fatal编程技术网

Python Pyplot errorbar无法传递颜色数组

Python Pyplot errorbar无法传递颜色数组,python,matplotlib,Python,Matplotlib,我正在尝试更改使用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])

我正在尝试更改使用
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
类似问题的讨论。任何帮助都将不胜感激。

以下是部分答案。只需在没有标记的第一个图上绘制,并且在没有错误线的同一个图上绘制

关于报价人,建议:

ax=plt.gca()
ax.xaxis.set_minor_formatter(ticker.ScalarFormatter())
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
演示代码:

导入matplotlib.pyplot作为plt
将matplotlib.ticker导入为ticker
将matplotlib.axes导入为轴
将numpy作为np导入
Temps=np.数组([18000150001400010001750115001000057506000])
幂=np.数组([1.2,1.0,0.5,35,0.4,0.2,15,5.3,4.9])
错误=100*np.数组([2,2,2,2,2,2,2,3])
def makecolour(t):
a=(t-min(Temps))/(max(Temps)-min(Temps))
返回[1-A,0,A]表示A中的A]
打印轴(facecolor='black')
plt.yscale('log')
plt.xscale('log')
plt.xlim(2e4,5e3)
ax=plt.gca()
ax.xaxis.set\u minor\u格式化程序(ticker.ScalarFormatter())
ax.xaxis.set\u major\u格式化程序(ticker.ScalarFormatter())
plt.errorbar(temp,Powers,xerr=Errors,ecolor=makecolor(Temps),fmt='.',markersize=0)
plt.errorbar(温度、功率、XER=None、fmt='。)
plt.show()

以下是部分答案。只需在没有标记的第一个图上绘制,并且在没有错误线的同一个图上绘制

关于报价人,建议:

ax=plt.gca()
ax.xaxis.set_minor_formatter(ticker.ScalarFormatter())
ax.xaxis.set_major_formatter(ticker.ScalarFormatter())
演示代码:

导入matplotlib.pyplot作为plt
将matplotlib.ticker导入为ticker
将matplotlib.axes导入为轴
将numpy作为np导入
Temps=np.数组([18000150001400010001750115001000057506000])
幂=np.数组([1.2,1.0,0.5,35,0.4,0.2,15,5.3,4.9])
错误=100*np.数组([2,2,2,2,2,2,2,3])
def makecolour(t):
a=(t-min(Temps))/(max(Temps)-min(Temps))
返回[1-A,0,A]表示A中的A]
打印轴(facecolor='black')
plt.yscale('log')
plt.xscale('log')
plt.xlim(2e4,5e3)
ax=plt.gca()
ax.xaxis.set\u minor\u格式化程序(ticker.ScalarFormatter())
ax.xaxis.set\u major\u格式化程序(ticker.ScalarFormatter())
plt.errorbar(temp,Powers,xerr=Errors,ecolor=makecolor(Temps),fmt='.',markersize=0)
plt.errorbar(温度、功率、XER=None、fmt='。)
plt.show()