python - Pyplot errorbar 无法传递颜色数组

标签 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])
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()

resulting plot

关于python - Pyplot errorbar 无法传递颜色数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58776466/

相关文章:

python - 如何通过python打开一个文件

Python + Facebook,轻松获取群组信息

python - sitk.GetArrayFromImage 返回空的 numpy 数组?

python - 添加 UTC 时间轴以以时间格式绘制本地时间

python - 根据颜色图的 2D 颜色误差条

python - 自动化无聊的事情,第 6 章 台式打印机

python - 如何通过引用传递变量?

python - Azure 表存储 Python SDK,语法无效

python - matplotlib 艺术家中的多边形包含测试

python - matplotlib 中的轴刻度标签填充