13

我有如下条形图:http://matplotlib.org/examples/api/barchart_demo.html

在这种情况下,我们假设 G1-G5 组中的每一个代表每组中的男性在某项考试中获得的平均分数,而每组中的女性在相同的考试中获得的平均分数。

现在假设我有一些与每个组相关的其他功能(平均可爱度(浮动在 1-5 之间))。

Ex: Avg Likability of men in G1 - 1.33
                   Avg Likability of women in G1 - 4.6
                   Avg Likability of men in G2- 5.0
                   .... etc...

让我们假设 1 - 不讨人喜欢和 5 - 非常讨人喜欢

我想知道如何通过更改颜色示例的阴影将这种可爱性特征融入每个条形图:由于上例中第 1 组的男性有 1.33,因此他们的图表将比第 1 组的男性更浅的红色阴影G2,由于 G2 的男性有 5.0 的好感度,他们的条形图将是图表中最深的红色阴影,女性也是如此。

我希望我已经说清楚了。如果有人能指出 matplotlib 中可以实现这一目标的资源,我将不胜感激,因为我对这个包非常陌生。

提前致谢。

4

3 回答 3

12

bar将颜色列表作为参数(docs)。只需传入你想要的颜色。

import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import Normalize
from numpy.random import rand

fig, ax = plt.subplots(1, 1)
# get a color map
my_cmap = cm.get_cmap('jet')
# get normalize function (takes data in range [vmin, vmax] -> [0, 1])
my_norm = Normalize(vmin=0, vmax=5)
# some boring fake data
my_data = 5*rand(5)
ax.bar(range(5), rand(5), color=my_cmap(my_norm(my_data)))

plt.show()

在此处输入图像描述

于 2013-09-19T20:07:18.710 回答
5
import pandas as pd
import matplotlib.pyplot as plt  

df = pd.DataFrame([1,2,3,4], [1,2,3,4])   
color = ['red','blue','green','orange']
df.plot(kind='bar', y=0, color=color, legend=False, rot=0)

在此处输入图像描述

于 2019-01-15T12:07:07.170 回答
3
import matplotlib.pyplot as plt
import matplotlib as mp
import numpy as np


xs = "ABCDEFGHI"
ys = [5, 6, 7, 8, 9, 10, 11, 12, 13]


#Colorize the graph based on likeability:

likeability_scores = np.array([
    5, 4.5, 3.5,
    2.5, 1.5, .5,
    2, 3, 4,
])

data_normalizer = mp.colors.Normalize()
color_map = mp.colors.LinearSegmentedColormap(
    "my_map",
    { 
        "red": [(0, 1.0, 1.0),
                (1.0, .5, .5)],

        "green": [(0, 0, 0),
                  (1.0, 0, 0)],

        "blue": [(0, 0, 0),
                 (1.0, 0, 0)]
    }

)

#Map xs to numbers:
N = len(xs)
x_nums = np.arange(1, N+1)

#Plot a bar graph:
plt.bar(
    x_nums,
    ys,
    align="center",
    color=color_map(data_normalizer(likeability_scores))
)

#Change x numbers back to strings:
plt.xticks(x_nums, xs)

plt.show()

--output:--

在此处输入图像描述

r,g,b 值从 0-1 运行。这是红色映射:

       "red": [(0, 1.0, 1.0),
               (1.0, .5, .5)],

每个元组中的第一个元素指定归一化的相似度得分。每个元组中的第二个元素指定红色的阴影 (0-1)。每个元组中的第三个元素用于更复杂的东西,所以这里它总是与第二个元素相同。

红色映射指定 0-1.0(每个元组的第一个元素)之间的归一化相似度分数将映射到 100% 红色到 50% 红色的范围(每个元组中的第二个元素)。归一化的喜爱度得分为 0 将被映射到 100% 的红色,而归一化的喜爱度得分为 1.0 将被映射到 50% 的红色。将最深的红色设置为 50% 可防止红色变得太暗以至于看起来呈棕色或黑色。

您可以根据需要指定任意数量的元组 - 您只需确保为标准化的喜爱度分数的整个范围 (0-1) 分配红色值,例如:

       "red": [(0, .5, .5),
               (.8, .6, .6),
               (1.0, .9, .9)],

你不能这样做:

       "red": [(0, .5, .5),
               (.8, 1.0, 1.0)],
于 2013-09-24T20:29:57.190 回答