Py学习  »  Python

用Python把图做得好看点:用Matplotlib画个Circos和弦图

EasyCharts • 6 年前 • 866 次点击  

此文于 2019-02-23 发表在EasyCharts-知乎专栏:Python数据分析与可视化

https://zhuanlan.zhihu.com/EasyCharts-Python

这系列文章就是下面这位身高180、帅气的小哥哥撰写,人长得好看,画的图也好看!




一直觉得circos图 很好看,最近尝试了一下 对中间关系曲线的 绘制


主要利用的数学工具是 贝塞尔曲线

但是对贝塞尔曲线中间的控制点取值 还是不太满意 造成部分曲线看着有点奇怪

成品大概是这样

代码如下:

import matplotlib.pyplot as pltimport numpy as npimport pandas as pdimport random
Start1=[0 for i in range(50)]for i in range(60): Start1.append(5/np.power(2,0.2))for i in range(80): Start1.append(-5/np.power(2,0.2))
df=pd.DataFrame(Start1,columns=['Startx'])df['Starty']=np.power(25-np.power(df['Startx'],2),0.5)*-1df['Endx']=[random.uniform(-5,5.0) for i in range(len(df))] df['Endy']=np.power(25-np.power(df['Endx'],2),0.5)*[random.sample([1,-1], 1)[0] for i in range(len(df))]df['']=np.power(25 -np.power(df['Endx'],2),0.5)df['斜率1']=(df['Starty']-df['Endy'])/(df['Startx']-df['Endx'])df['斜率2']=-1/df['斜率1']df['中心点x']=(df['Startx']+df['Endx'])/2df['中心点y']=(df['Starty']+df['Endy'])/2df['x轴移动']=df['中心点x']-df['中心点x']*(0.05)df['y轴移动']=df['x轴移动']*df['斜率2']df['控制点x']=df['中心点x']-df['x轴移动']df['控制点y']=df['中心点y']-df['y轴移动']df['r1']=np.power(df['Startx']*df['Startx']+df['Starty']*df['Starty'],1/2)df['theta1']=np.arctan2(df['Starty'],df['Startx'])df['r2']=np.power(df['Endx']*df['Endx']+df['Endy']*df['Endy'],1/2)df['theta2']=np.arctan2(df['Endy'],df['Endx'])fig=plt.figure(figsize=[15,15])ax=fig.add_subplot(1,1,1,projection='polar')t=np.linspace(0,1,1000)for i in range(len(df)): x_c=(1-t)*(1-t)*df.iloc[i]['Startx']+2*t*(1-t)*df.iloc[i]['控制点x']+t*t*df.iloc[i]['Endx'] y_c=(1-t)*(1-t)*df.iloc[i]['Starty']+2*t*(1-t)*df.iloc[i]['控制点y']+t*t*df.iloc[i]['Endy'] r=np.power(y_c*y_c+x_c*x_c,0.5) theta=np.arctan2(y_c,x_c) ax.plot(theta,r,color=(0/255,123/255,187/255),alpha=0.5)ax.scatter(df[['theta1','theta2']],df[['r1','r2']],color=(0/255,123/255,87/255),alpha=1)ax.bar(x=df['theta2'],height=[2],bottom=6,width=0.01,color=(225/255,225/255,225/255),alpha=0.5)plt.axis('off')

讲解留到以后吧

之前一直以为参数算错了 后来发现是坐标轴的起点没有设置好

需改了坐标轴设置后,在增加对粗细的修改



大家都在看

plotnine:python数据可视化版ggplot2

Python科研统计作图Plotnine+Seaborn+matplotlib替代R ggplot2系列(1)

Python科研统计作图Plotnine+Seaborn+matplotlib替代R ggplot2系列(2)

Python Seaborn (1) 艺术化的图表控制

Python Seaborn (2) 斑驳陆离的调色板

Python Seaborn (3) 分布数据集的可视化

Python Seaborn (4) 线性关系的可视化

Python Seaborn (5) 分类数据的绘制



加入QQ群可领取: plotnine的数据可视化学习手册


如需联系EasyCharts团队

请加微信:EasyCharts


【书籍推荐】《Excel 数据之美--科学图表与商业图表的绘制》

【手册获取】国内首款-数据可视化参考手册:专业绘图必备

【必备插件】  EasyCharts -- Excel图表插件

【网易云课堂】  Excel 商业图表修炼秘笈之基础篇




Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29828