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编写登陆接口的方法
Jul 10 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
Python实现PS滤镜碎片特效功能示例
Jan 24 Python
完美解决python中ndarray 默认用科学计数法显示的问题
Jul 14 Python
python之信息加密题目详解
Jun 26 Python
Python如何筛选序列中的元素的方法实现
Jul 15 Python
python3 tkinter实现添加图片和文本
Nov 26 Python
Pytorch mask_select 函数的用法详解
Feb 18 Python
python matplotlib实现将图例放在图外
Apr 17 Python
什么是Python中的匿名函数
Jun 02 Python
Python实现LR1文法的完整实例代码
Oct 25 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 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绘图技术
2013/07/03 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
javascript实现数字倒计时特效
2016/03/30 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
小程序实现分类页
2019/07/12 Javascript
[10:18]2018DOTA2国际邀请赛寻真——找回自信的TNCPredator
2018/08/13 DOTA
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
python创建和使用字典实例详解
2013/11/01 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python引用传值概念与用法实例小结
2017/10/07 Python
django session完成状态保持的方法
2018/11/27 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python获取交互式ssh shell的方法
2019/02/14 Python
python全栈知识点总结
2019/07/01 Python
Python简易版图书管理系统
2019/08/12 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Python 中Operator模块的使用
2021/01/30 Python
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
公司同意接收函
2014/01/13 职场文书
党校培训自我鉴定
2014/02/01 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
教师优秀党员事迹材料
2014/08/14 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
毕业论文致谢怎么写
2015/05/14 职场文书
商业计划书范文
2019/04/24 职场文书
React自定义hook的方法
2022/06/25 Javascript
Redis唯一ID生成器的实现
2022/07/07 Redis