python画图渐变颜色,用python画渐变色

  python画图渐变颜色,用python画渐变色

  本文主要详细介绍Python实现渐变颜色的水平堆栈图。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

  本文分享Python实现渐变水平叠加图的具体代码,供大家参考。具体内容如下

  关键词:python,matplotlib,barh,堆栈

  缘起:做数据处理的时候,需要做一张图,如下图:

  示例图

  正好最近在学python,然后想尝试用Python实现,因为接触了一点matplotlib库,然后想用它实现。

  首先通过查资料,才知道这种图的名字叫做“水平堆叠条状图”,然后使用Matplotlib.plot.barh()就可以实现水平堆叠的效果;

  或者横向和纵向叠加的效果。网上有不少教程,这里就不描述了,主要是记录如何实现渐变。

  一开始找资料,没找到这个叠图的渐变颜色怎么做。

  如果有大哥找到了简单的方法,请告诉我!然后自己试着写一些语句来实现它;现在把研究过程做个记录。

  首先是绘图函数的认识

  barh函数的参数很多,但我们只关注几个参数:X表示坐标比如上图中的E1 E2 E3(可以理解为刻度值),width表示当前栈的长度。这个值很关键!值是当前堆叠部分的起点,left这个值也很关键表示当前堆叠部分的颜色,遵循color顺序。但是它的范围(0——0.1),也就是我们需要把实际的(R,G,B)值除以255然后传入表示当前堆叠部分颜色透明度的RGB,也就是和上面的颜色参数一起形成(RGBA)。alpha表示当前堆叠部分的图形样本,即上图中类似“标签=二级索引1”的图例;当此参数为空时,将不会创建图例。如果不为空,将根据输入字符串创建图例。默认情况下,不支持中文。如果要使用中文,需要在导入matplotlib后添加以下两句话。

  #用于正常显示中文。

  PLT . RC params[ font . sans-serif ]=[ sim hei , Times New Roman]

  PLT . RC params[ axes . unicode _ MINUS ]=False

  `

  label

  x是数轴上显示的刻度值(也可以重命名);

  宽度代表堆积(填充)长度,左边是本次填充的起点。那么结合这两个参数,我们就可以把本来应该一次填充的长度分成若干次填充,然后对这几次填充分别使用相邻的RGB值,就会呈现出一种渐变的效果。

  #填充完成后。

  将matplotlib.pyplot作为plt导入

  将numpy作为np导入

  PLT . RC params[ font . sans-serif ]=[ sim hei , times new Roman] #用于正常显示中文标签。

  PLT . RC params[ axes . unicode _ MINUS ]=False

  #在线找到渐变的RGB配色方案

  Color1=np.array([131,175,155])

  Color2=np.array([200,200,169])

  Color3=np.array([249,205,173])

  x=[E1]

  Y1=np.array([0.1])

  Y2=np.array([0.3])

  plt.barh(x,Y1,align=center ,color=Color1/255,alpha=1,label=ONE1 )

  plt.barh(x,Y2,left=Y1,color

  =Color2 / 255, alpha=1, label="ONE2")

  plt.legend()

  plt.show()

  上述代码运行以后的效果是这样的

  

  然后基于我们上述的分析,我们将对ONE2色块运用参数:X,width,left,color进行分次填充实现渐变效果:

  首先我们定义一个变量divid,这个变量将会决定了你分多少次填充

  

#填充次数,值越大渐变效果越好,但是计算量也会相应的增大

  divid=20

  其次我们将我们原来的填充量、颜色渐变差值分别分别除以divid

  

Y2_rate=Y2/divid

  #用下一个颜色减去当前色快的颜色;这也将会解释了我后来的完整代码里,将会严格要求Color个数大于 Y 的个数 

  #实际上Color和Y大多数情况下是行向量,但仍然用“个数”来表述,为了更方便理解

  Color_rate=(Color3-Color2)/divid

  然后我们将会将这两个值在barh函数里进行使用

  

for i in range(divid):

      if i==int( divid /2 ): #这里是去原先整个色块的中心RGB作为图例色

          plt.barh(x,Y_rate,left=Y1+Y_rate*i,color=(Color1+i*Color_rate) / 255, alpha=1.0,label=ONE2)

      else:

          plt.barh(x,Y_rate,left=Y1+Y_rate*i,color=(Color1+i*Color_rate) / 255, alpha=1.0)

  运行之后的效果为

  

  而为了说明divid在这里影响渐变效果我们将分辨用几个递增的divid值来进行演示
divid=2时候,出现了明显的分界线

  

  divid=8时候,分界线被淡化了,但还是隐约可见

  

  divid=50的时候,几乎看不到分界线了

  

  以上效果仅仅是基于一个X 一个Y的色快渐变进行演示,是为了更好地演示方法和思路;但是实际应用中,X,Y都将会是较长的行向量,因此,需要斟酌一下divid的选择;

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: