Python 根据彩色地图着色的条形图?

Python 根据彩色地图着色的条形图?,python,matplotlib,plot,seaborn,Python,Matplotlib,Plot,Seaborn,首先,我对Matplotlib或Seaborn中的颜色非常陌生。我的目的是创建一个条形图,其中条形图根据自定义调色板着色。类似于此,但使用我的自定义调色板(请参见下面的带有红色、橙色、绿色和蓝色的调色板): 我已经使用LinearSegmentedColormap方法创建了我的自定义顺序调色板,但我无法在简单的plt.barplot()中使用它。当然不难,但我看不见路。我使用下面的函数创建了调色板,该函数来自此线程: 返回此绘图的: 据我所知,我不能将colormap(对象类型来自Linea

首先,我对Matplotlib或Seaborn中的颜色非常陌生。我的目的是创建一个条形图,其中条形图根据自定义调色板着色。类似于此,但使用我的自定义调色板(请参见下面的带有红色、橙色、绿色和蓝色的调色板):

我已经使用
LinearSegmentedColormap
方法创建了我的自定义顺序调色板,但我无法在简单的
plt.barplot()
中使用它。当然不难,但我看不见路。我使用下面的函数创建了调色板,该函数来自此线程:

返回此绘图的:

据我所知,我不能将colormap(对象类型来自
LinearSegmentedColormap()
?)用于条形图,但colormap是我实现自定义顺序调色板的唯一方法

总之,我想将第二个图(散点图)的颜色映射应用到第一个图(条形图)。目前我无法执行此操作,因为
barplot()
函数没有接受
LinearSegmentedColormap
对象类型的参数


我可能把它弄得比实际情况更难了,所以我希望能有更干净或更正确的方法。

要获得一个条形图,其中条形图根据颜色图上色,可以使用
bar(x,y,color=colors)
color
参数,其中
colors
是条形图的长度列表,包含所有颜色的。即,该列表中的
I
th条目是
I
th条的颜色。
为了从colormap创建此列表,需要使用相应的值调用colormap


Seaborn
barplot
非常适合这样做:


我看不出有什么问题。代码运行良好。这里的问题到底是什么?对不起,可能没有充分解释我的问题。我想知道如何在条形图中使用此颜色映射,如“plt.barplot(x,y,color=“my_custom_colormap”)。正如您在第一条注释中所看到的,调色板在散点图(plt.scatter(…c=colors,cmap=rvb))中工作良好。问题是在条形图函数中没有类似“cmap”的参数“。在代码中有散点图,而不是条形图。您希望条形图中的颜色代表哪个数量?请你的问题反映问题本身,而不是实际工作正常的东西。你的缩进全错了。请确定我们如何添加颜色条?有关颜色条,请参阅例如。
def make_colormap(seq):
"""Return a LinearSegmentedColormap
seq: a sequence of floats and RGB-tuples. The floats should be increasing
and in the interval (0,1).
"""
seq = [(None,) * 3, 0.0] + list(seq) + [1.0, (None,) * 3]
cdict = {'red': [], 'green': [], 'blue': []}
for i, item in enumerate(seq):
    if isinstance(item, float):
        r1, g1, b1 = seq[i - 1]
        r2, g2, b2 = seq[i + 1]
        cdict['red'].append([item, r1, r2])
        cdict['green'].append([item, g1, g2])
        cdict['blue'].append([item, b1, b2])

return mcolors.LinearSegmentedColormap('CustomMap', cdict)

#main#
c = mcolors.ColorConverter().to_rgb
rvb = make_colormap(
[c('red'), 0.125, c('red'), c('orange'), 0.25, c('orange'),c('green'),0.5, c('green'),0.7, c('green'), c('blue'), 0.75, c('blue')])

N = 1000
array_dg = np.random.uniform(0, 10, size=(N, 2))
colors = np.random.uniform(0, 5, size=(N,))
plt.scatter(array_dg[:, 0], array_dg[:, 1], c=colors, cmap=rvb)
plt.colorbar()
plt.show()
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import numpy as np

clist = [(0, "red"), (0.125, "red"), (0.25, "orange"), (0.5, "green"), 
         (0.7, "green"), (0.75, "blue"), (1, "blue")]
rvb = mcolors.LinearSegmentedColormap.from_list("", clist)

N = 60
x = np.arange(N).astype(float)
y = np.random.uniform(0, 5, size=(N,))

plt.bar(x,y, color=rvb(x/N))
plt.show()
ax = sns.barplot("size", y="total_bill", data=tips, palette="Blues_d")