使用特定值改变条形图中每个条的颜色

2025-03-11 08:50:00
admin
原创
63
摘要:问题描述:我有一个如下的条形图:http://matplotlib.org/examples/api/barchart_demo.html在这种情况下,我们假设 G1-G5 中的每个组代表每个组中的男性在某项考试中获得的平均分数以及每个组中的女性在同一项考试中获得的平均分数。现在假设我有一些与每个组相关的其他...

问题描述:

我有一个如下的条形图: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,因此他们的图形将比 G2 中的男性采用更浅的红色,由于 G2 中的男性可爱度为 5.0,因此他们的条形图将是图形中最深的红色,对于女性也是如此。

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


解决方案 1:

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()

在此处输入图片描述

解决方案 2:

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)

在此处输入图片描述

解决方案 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)],

解决方案 4:

创建按乘客人数计算的平均小费条形图

  import numpy as np

  import pandas as pd

  from matplotlib import pyplot as plt

  df=pd.read_csv('data/2017_Yellow_Taxi_Trip_Data.csv')

在此处输入图片描述

根据乘客人数计算平均小费

  mean_tips_by_passenger_count = df.groupby(['passenger_count']).mean()[['tip_amount']]

在此处输入图片描述

  data = mean_tips_by_passenger_count.tail(-1) # removing data with zero passenger [consider as a outlier]

  pal = sns.color_palette("Greens_d", len(data)) # Choosing a number of diffrent green shade, here total 6 shades. 

  rank = data['tip_amount'].argsort().argsort()

  plt.figure(figsize=(12,7))

  ax = sns.barplot(x=data.index,
        y=data['tip_amount'],
        palette=np.array(pal[::-1])[rank]) 

  ax.axhline(df['tip_amount'].mean(), ls='--', color='red', label='global mean')  # Creating mean line into BarPlot

  ax.legend()

  plt.title('Mean tip amount by passenger count', fontsize=16);

在此处输入图片描述

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3998  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2749  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   85  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   96  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   83  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用