gpt4 book ai didi

Python利用imshow制作自定义渐变填充柱状图(colorbar)

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python利用imshow制作自定义渐变填充柱状图(colorbar)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

目的

在各种各样的理论计算中,常常需要绘制各种填充图,绘制完后需要加渐变填充的colorbar。可是有些软件如VMD,colorbar渲染后颜色分布有些失真,不能较准确的表达各颜色对应的数值。用ps中的渐变填充可以解决该问题,但很多电脑配置较低,不能很好的运行ps。Python也可以直接绘制colorbar,填充颜色就好。如cmap中的bwr渐变本人就比较常用。然而,有时候颜色范围是负数范围多于正数范围(如:colorbar需要表示 [-60,40]这段,蓝色表示负数,红色表示正数,白色应该在colorbar由下往上60%处),bwr渐变将white置于50%处显得不够合理,因此需要自定义填充。本文以imshow() 函数来进行填充柱状图达到自定义colorbar的目的。interpolation=‘bicubic' 可以很好的做出渐变效果.

代码 。

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Wed Dec 9 10:36:54 2020
  4.  
  5. @author: fya
  6. """
  7.  
  8. import matplotlib.pyplot as plt
  9. import numpy as np
  10. from matplotlib.colors import ListedColormap,LinearSegmentedColormap
  11. import matplotlib as mpl
  12.  
  13. fig, ax = plt.subplots(dpi=96)
  14. ax.set(xlim=(1,10), ylim=(-0.1,101), autoscale_on=False) #创建图像范围
  15.  
  16. a = np.array([[1, 1],
  17. [2, 2],
  18. [3, 3],
  19. [4, 4],
  20. [5, 5]]) #每种渐变色分成五段(array五行),数字表示在colormap对应的深浅
  21. print(a.shape)
  22.  
  23. clist=['white','blue'] #线性变化颜色由上面array值 小到大,越小,越白,达到上白下蓝的渐变效果
  24. clist2=['red','white'] #渐变色2,用于白色到红色填充,array越小,越红,达到上红下白的效果
  25. newcmp = LinearSegmentedColormap.from_list('chaos',clist)
  26. newcmp2 = LinearSegmentedColormap.from_list('chaos',clist2)
  27.  
  28. plt.imshow(a,cmap=newcmp,interpolation='bicubic',extent=(1,10,0,60))#60%都是蓝色到白色渐变
  29. plt.imshow(a,cmap=newcmp2,interpolation='bicubic',extent=(1,10,60,100)) #白色设置在60%处
  30.  
  31. frame = plt.gca() #读取当前图层
  32. ax.yaxis.tick_right() #纵坐标移到右边
  33. ax.set_yticklabels(('-80','-60','-40','-20','0','20','40')) #自定义yticks显示的值,第一个label不显示
  34. frame.spines['top'].set_visible(False) #上框线不显示
  35. frame.spines['bottom'].set_visible(False)
  36. frame.spines['right'].set_visible(False)
  37. frame.spines['left'].set_visible(False)
  38. plt.xticks([]) #x坐标不要
  39.  
  40. plt.show()
  41. fig.savefig('colorbar.tif',dpi=600,format='tif')
  42. print('Done!')
  43.  
  44. #N = 10
  45. #x = np.arange(N) + 0.15
  46. #y = np.random.rand(N)
  47.  
  48. #width = 0.4
  49. #for x, y in zip(x, y):
  50. #ax.imshow(a, interpolation='bicubic', extent=(x, x+width, 0, y), cmap=plt.cm.Blues_r)
  51.  
  52. #ax.set_aspect('auto')
  53. #plt.show()

代码2,渐变色分100段 。

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Wed Dec 9 10:36:54 2020
  4.  
  5. @author: fanyiang
  6. """
  7.  
  8. import matplotlib.pyplot as plt
  9. import numpy as np
  10. from matplotlib.colors import ListedColormap,LinearSegmentedColormap
  11. import matplotlib as mpl
  12. import pandas as pd
  13. import os
  14.  
  15. fig, ax = plt.subplots(dpi=96)
  16. ax.set(xlim=(1,10), ylim=(-0.1,101), autoscale_on=False)
  17.  
  18. #a = np.array([[1, 1],
  19. #[2, 2],
  20. #[3, 3],
  21. #[4, 4],
  22. #[5, 5]]) #每种渐变色分成五段(array五行),数字表示在colormap对应的深浅
  23. avalue=locals()
  24. dfvalue=locals()
  25. for i in range(1,101):
  26. avalue['a'+str(i)]=np.array([[i,i]]) #渐变色分为100段,分的更细
  27. dfvalue['df'+str(i)]=pd.DataFrame(avalue['a'+str(i)]) #转dataframe
  28. df=dfvalue['df'+str(i)]
  29. df.to_csv("temp.csv", mode='a',header=None) #暂存csv文件,第一列会把每一次循环的index放进去
  30. df3=pd.read_csv('temp.csv',header=None)#读取csv
  31. df3.columns=['序号','x','y']#column命名,第一列废弃
  32. df3=df3.drop('序号',axis=1)#删除第一列
  33. a=np.array(df3) #转array
  34. print(df3.head())
  35.  
  36. #a=np.vstack((a1,a2,a3,a4,a5,a6,a7,a8,a9,a10))
  37.  
  38. print(a)
  39.  
  40. clist=['white','blue'] #线性变化颜色由上面array值 小到大
  41. clist2=['red','white']
  42. newcmp = LinearSegmentedColormap.from_list('chaos',clist)
  43. newcmp2 = LinearSegmentedColormap.from_list('chaos',clist2)
  44.  
  45. plt.imshow(a,cmap=newcmp,interpolation='bicubic',extent=(1,10,0,60))
  46. plt.imshow(a,cmap=newcmp2,interpolation='bicubic',extent=(1,10,60,100)) #白色设置在60%处
  47.  
  48. frame = plt.gca() #读取当前图层
  49. ax.yaxis.tick_right() #纵坐标移到右边
  50. ax.set_yticklabels(('-80','-60','-40','-20','0','20','40')) #自定义yticks显示的值,第一个label不显示
  51. frame.spines['top'].set_visible(False) #上框线不显示
  52. frame.spines['bottom'].set_visible(False)
  53. frame.spines['right'].set_visible(False)
  54. frame.spines['left'].set_visible(False)
  55. plt.xticks([]) #x坐标不要
  56.  
  57. plt.show()
  58. fig.savefig('colorbar.tif',dpi=600,format='tif')
  59. os.remove("temp.csv") #删除临时的csv文件
  60. print('Done!')
  61.  
  62. #N = 10
  63. #x = np.arange(N) + 0.15
  64. #y = np.random.rand(N)
  65.  
  66. #width = 0.4
  67. #for x, y in zip(x, y):
  68. #ax.imshow(a, interpolation='bicubic', extent=(x, x+width, 0, y), cmap=plt.cm.Blues_r)
  69.  
  70. #ax.set_aspect('auto')
  71. #plt.show()

效果

效果1 。

Python利用imshow制作自定义渐变填充柱状图(colorbar)

效果2 。

Python利用imshow制作自定义渐变填充柱状图(colorbar)

到此这篇关于Python利用imshow制作自定义渐变填充柱状图(colorbar)的文章就介绍到这了,更多相关Python 渐变填充柱状图内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/kelvinfanyiang/article/details/110920391 。

最后此篇关于Python利用imshow制作自定义渐变填充柱状图(colorbar)的文章就讲到这里了,如果你想了解更多关于Python利用imshow制作自定义渐变填充柱状图(colorbar)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com