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


Posted in Python onDecember 10, 2020

目的

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

代码

# -*- coding: utf-8 -*-
"""
Created on Wed Dec 9 10:36:54 2020

@author: fya
"""

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap,LinearSegmentedColormap
import matplotlib as mpl

fig, ax = plt.subplots(dpi=96)
ax.set(xlim=(1,10), ylim=(-0.1,101), autoscale_on=False) #创建图像范围

a = np.array([[1, 1],
       [2, 2],
       [3, 3],
       [4, 4],
       [5, 5]]) #每种渐变色分成五段(array五行),数字表示在colormap对应的深浅
print(a.shape)

clist=['white','blue'] #线性变化颜色由上面array值 小到大,越小,越白,达到上白下蓝的渐变效果
clist2=['red','white'] #渐变色2,用于白色到红色填充,array越小,越红,达到上红下白的效果
newcmp = LinearSegmentedColormap.from_list('chaos',clist)
newcmp2 = LinearSegmentedColormap.from_list('chaos',clist2)


plt.imshow(a,cmap=newcmp,interpolation='bicubic',extent=(1,10,0,60))#60%都是蓝色到白色渐变
plt.imshow(a,cmap=newcmp2,interpolation='bicubic',extent=(1,10,60,100)) #白色设置在60%处

frame = plt.gca() #读取当前图层
ax.yaxis.tick_right() #纵坐标移到右边
ax.set_yticklabels(('-80','-60','-40','-20','0','20','40')) #自定义yticks显示的值,第一个label不显示
frame.spines['top'].set_visible(False) #上框线不显示
frame.spines['bottom'].set_visible(False)
frame.spines['right'].set_visible(False)
frame.spines['left'].set_visible(False)
plt.xticks([]) #x坐标不要


plt.show()
fig.savefig('colorbar.tif',dpi=600,format='tif')
print('Done!')

#N = 10
#x = np.arange(N) + 0.15
#y = np.random.rand(N)

#width = 0.4
#for x, y in zip(x, y):
  #ax.imshow(a, interpolation='bicubic', extent=(x, x+width, 0, y), cmap=plt.cm.Blues_r)

#ax.set_aspect('auto')
#plt.show()

代码2,渐变色分100段

# -*- coding: utf-8 -*-
"""
Created on Wed Dec 9 10:36:54 2020

@author: fanyiang
"""

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import ListedColormap,LinearSegmentedColormap
import matplotlib as mpl
import pandas as pd
import os

fig, ax = plt.subplots(dpi=96)
ax.set(xlim=(1,10), ylim=(-0.1,101), autoscale_on=False)

#a = np.array([[1, 1],
       #[2, 2],
       #[3, 3],
       #[4, 4],
       #[5, 5]]) #每种渐变色分成五段(array五行),数字表示在colormap对应的深浅
avalue=locals() 
dfvalue=locals()      
for i in range(1,101):
  avalue['a'+str(i)]=np.array([[i,i]]) #渐变色分为100段,分的更细
  dfvalue['df'+str(i)]=pd.DataFrame(avalue['a'+str(i)]) #转dataframe
  df=dfvalue['df'+str(i)]
  df.to_csv("temp.csv", mode='a',header=None) #暂存csv文件,第一列会把每一次循环的index放进去
df3=pd.read_csv('temp.csv',header=None)#读取csv
df3.columns=['序号','x','y']#column命名,第一列废弃
df3=df3.drop('序号',axis=1)#删除第一列
a=np.array(df3) #转array
print(df3.head())

                                                                      
                                                                  
#a=np.vstack((a1,a2,a3,a4,a5,a6,a7,a8,a9,a10))

print(a)

clist=['white','blue'] #线性变化颜色由上面array值 小到大
clist2=['red','white']
newcmp = LinearSegmentedColormap.from_list('chaos',clist)
newcmp2 = LinearSegmentedColormap.from_list('chaos',clist2)


plt.imshow(a,cmap=newcmp,interpolation='bicubic',extent=(1,10,0,60))
plt.imshow(a,cmap=newcmp2,interpolation='bicubic',extent=(1,10,60,100)) #白色设置在60%处

frame = plt.gca() #读取当前图层
ax.yaxis.tick_right() #纵坐标移到右边
ax.set_yticklabels(('-80','-60','-40','-20','0','20','40')) #自定义yticks显示的值,第一个label不显示
frame.spines['top'].set_visible(False) #上框线不显示
frame.spines['bottom'].set_visible(False)
frame.spines['right'].set_visible(False)
frame.spines['left'].set_visible(False)
plt.xticks([]) #x坐标不要


plt.show()
fig.savefig('colorbar.tif',dpi=600,format='tif')
os.remove("temp.csv") #删除临时的csv文件
print('Done!')

#N = 10
#x = np.arange(N) + 0.15
#y = np.random.rand(N)

#width = 0.4
#for x, y in zip(x, y):
  #ax.imshow(a, interpolation='bicubic', extent=(x, x+width, 0, y), cmap=plt.cm.Blues_r)

#ax.set_aspect('auto')
#plt.show()

效果

效果1

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

效果2

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

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

Python 相关文章推荐
python用reduce和map把字符串转为数字的方法
Dec 19 Python
Python队列的定义与使用方法示例
Jun 24 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
使用Django简单编写一个XSS平台的方法步骤
Mar 25 Python
PyTorch的深度学习入门教程之构建神经网络
Jun 27 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
python numpy数组复制使用实例解析
Jan 10 Python
详解Django配置JWT认证方式
May 09 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
python 指定源路径来解决import问题的操作
Mar 04 Python
详解Python GUI编程之PyQt5入门到实战
Dec 10 #Python
python 实现ping测试延迟的两种方法
Dec 10 #Python
弄清Pytorch显存的分配机制
Dec 10 #Python
python实现经纬度采样的示例代码
Dec 10 #Python
Python urlopen()参数代码示例解析
Dec 10 #Python
Python urllib request模块发送请求实现过程解析
Dec 10 #Python
Python APScheduler执行使用方法详解
Dec 10 #Python
You might like
对于PHP 5.4 你必须要知道的
2013/08/07 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php向js函数传参的几种方法
2014/08/10 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
jQuery 动画基础教程
2008/12/25 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
javascript实现检验的各种规则
2015/07/31 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
关于JS中的apply,call,bind的深入解析
2016/04/05 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
vant picker+popup 自定义三级联动案例
2020/11/04 Javascript
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
Python import自定义模块方法
2015/02/12 Python
Python兔子毒药问题实例分析
2015/03/05 Python
Python实现Tab自动补全和历史命令管理的方法
2015/03/12 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
python 重定向获取真实url的方法
2018/05/11 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
python同步两个文件夹下的内容
2019/08/29 Python
学习Python爬虫的几点建议
2020/08/05 Python
如何一键升级Python所有包
2020/11/05 Python
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
书香校园建设方案
2014/05/02 职场文书
公司内部升职自荐信
2015/03/27 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
SQL Server实现分页方法介绍
2022/03/16 SQL Server