我们的数据可视化课程已经上线啦!!目前课程的主要方向是 科研、统计、地理相关的学术性图形绘制方法,后续也会增加商务插图、机器学等、数据分析等方面的课程。课程免费新增,这点绝对良心!
我们第一个数据可视化交流圈子也已经上线了,主要以我的第一本书籍《科研论文配图绘制指南-基于Python》为基础进行拓展,提供「课堂式」教学视频,还有更多拓展内容,可视化技巧远超书籍本身,书籍修正和新增都会分享到圈子里面~~
参与课程或者圈子的你将获取到:学员答疑、可视化资源分享、可视化技巧补充、可视化业务代做(学员和甲方对接)、副业交流、提升认知等等。
在我们学员交流群中,很多同学都反映书籍中或者课程中使用Python绘制和弦图(Chord Diagram)的方法较为繁琐,且绘制样式有限,那么Python中有没有其他好用的绘制方法呢?
其实,在针对书籍中的很多内容,我们都在进行「迭代和更新」,不仅是因为书籍出版的延迟性导致代码版本较老,同时也是因为要加入很多新的内容。
今天,我们就同学提出的和弦图
绘制方法,介绍一个全新的绘制工具-「pycirclize」
pycirclize软件包其实我们在之前的推文中有介绍过,但今天我们只介绍其绘制和弦图的绘制函数-「Circos()」
可通过如下方式进行快速安装:
pip install pycirclize
pycirclize软件包可以像R语言中的circlize
一样对矩阵数据(matrix data)进行和弦图的绘制。下面就介绍下Circos()函数的绘图功能。
from pycirclize import Circos
import pandas as pd
# Create matrix dataframe (3 x 6)
row_names = ["S1", "S2", "S3"]
col_names = ["E1", "E2", "E3", "E4", "E5", "E6"]
matrix_data = [
[4, 14, 13, 17, 5, 2],
[7, 1, 6, 8, 12, 15],
[9, 10, 3, 16, 11, 18],
]
matrix_df = pd.DataFrame(matrix_data, index=row_names, columns=col_names)
# Initialize from matrix (Can also directly load tsv matrix file)
circos = Circos.initialize_from_matrix(
matrix_df,
start=-265,
end=95,
space=5,
r_lim=(93, 100),
cmap="tab10",
label_kws=dict(r=94, size=12, color="white"),
link_kws=dict(ec="black", lw=0.5),
)
print(matrix_df)
fig = circos.plotfig()
from pycirclize import Circos
import pandas as pd
# Create matrix data (10 x 10)
row_names = list("ABCDEFGHIJ")
col_names = row_names
matrix_data = [
[51, 115, 60, 17, 120, 126, 115, 179, 127, 114],
[108, 138, 165, 170, 85, 221, 75, 107, 203, 79],
[108, 54, 72, 123, 84, 117, 106, 114, 50, 27],
[62, 134, 28, 185, 199, 179, 74, 94, 116, 108],
[211, 114, 49, 55, 202, 97, 10, 52, 99, 111],
[87, 6, 101, 117, 124, 171, 110, 14, 175, 164],
[167, 99, 109, 143, 98, 42, 95, 163, 134, 78],
[88, 83, 136, 71, 122, 20, 38, 264, 225, 115],
[145, 82, 87, 123, 121, 55, 80, 32, 50, 12],
[122, 109, 84, 94, 133, 75, 71, 115, 60, 210],
]
matrix_df = pd.DataFrame(matrix_data, index=row_names, columns=col_names)
# Initialize from matrix (Can also directly load tsv matrix file)
circos = Circos.initialize_from_matrix(
matrix_df,
space=3,
r_lim=(93, 100),
cmap="tab10",
ticks_interval=500,
label_kws=dict(r=94, size=12, color="white"),
)
print(matrix_df)
fig = circos.plotfig()
可以看出,每个组成部分都有对应的刻度属性,特别适合论文配图使用呢。
from pycirclize import Circos
from pycirclize.parser import Matrix
import pandas as pd
# Create from-to table dataframe & convert to matrix
fromto_table_df = pd.DataFrame(
[
["A", "B", 10],
["A", "C", 5],
["A", "D", 15],
["A", "E", 20],
["A", "F", 3],
["B", "A", 3],
["B", "G", 15],
["F", "D", 13],
["F", "E", 2],
["E", "A", 20],
["E", "D", 6],
],
columns=["from", "to", "value"], # Column name is optional
)
matrix = Matrix.parse_fromto_table(fromto_table_df)
circos = Circos.initialize_from_matrix(
matrix,
space=3,
cmap="viridis",
ticks_interval=5,
label_kws=dict(size=12, r=110),
link_kws=dict(direction=1, ec="black", lw=0.5),
)
print(fromto_table_df.to_string(index=False))
fig = circos.plotfig()
当然,在学习数据可视化的道路上,你也有很多问题得不到解答,也可以加入我们的可视化课程(可视化系列课程推文)后,在学员群里和大家一起谈论,一起进步,或者直接向我提问。如果我觉得你的问题很具有普适性,我会把它写成文章发布在公众号上,让更多人看到,有关我们数据可视化系列课程的服务内容,可以参考下面的 阅读原文。
不是?!这种图一行代码就搞定了,超简单....
这图这么多人问!?赶紧给大家复现出来~~..
ggpubr!一键绘制出版级论文配图,绘图小白福音......
tidyterra!空间数据处理、可视化神器...
Antarctic-Plots!不用ArcGIS,我照样可以画出惊艳的地图...
比Matplotlib合并子图更方便!patchworklib让我告别PS拼图...
Xarray,不用ArcGIS,所有地理空间绘图全搞定...
Nature都推荐的箱线图(Boxplot)绘制工具长啥样?免费、在线、灵活操作...?
完美解决Matplotlib绘图中、英文字体混显问题..
MATLAB绘图不好看?!不是,你是还没发现这几个工具包吧..
不是,这个地理数据工具这么强的吗?数据处理、可视化它都行..
这种环形图太难画?!带你一行代码搞定..
不是,这封面图这么多人问的吗?教程来了
不用Seaborn,这个工具也能绘制超炫的统计图形···
NetworkX,网络结构图最强绘制工具·····