Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python-matplotlib 散点图绘制

Python-matplotlib 散点图绘制

作者头像
DataCharm
发布于 2021-02-22 04:02:56
发布于 2021-02-22 04:02:56
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

01. 引言

本期推文的主要内容是散点图的绘制教程,所使用的数据关于全球教育水平划分的师生比例,涉及到的包主要为matplotlib和seaborn,当然用于数据处理分析的pandas和 numpy也必不可少。

02. 数据处理

2.1 原始数据

本文涉及的数据主要包括两种,一种为全球各大洲的网格数据,用于绘制另类散点图例,一种为全球各州的教育水平的师生比例,用于散点图的绘图。各大洲的网格数据如下(部分):如红框所示,为所需要的数据,用于绘图。

全球各大洲师生比例数据如下(部分):所需文章为student_ratio_count 。

接下来将两个数据进行匹配合并,这里需指出下:两个数据都有关于国家编码的列(country_code和alpha.3),利用pandas的merger方法就可实现两个数据的合并。

2.2 构造数据

和一般的绘图不同,稍微复杂的突变就需要自己根据需求进行特定数据的构造。这里所构造的数据详细如下:

(1)教育平均值

通过pandas 的mean()方法就可实现全球教育水平的平均值,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
world_avg = 23.518193030303

(2) 各大地区颜色设置

这里还是采用和之前推文Hans Rosling Charts Matplotlib 绘制等一样的字典颜色赋值,具体如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
order=["Africa", "Oceania","Asia","South America","North America","Europe"]
palette=["#0076BB", "#152769","#1AB6AF", "#E9E4A6","#FF3100","#E9A17C"]
region_color = dict(zip(order,palette))
region_color

结果如下:

(3)绘制大散点图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
region_y = {
    'Africa':1,
    'Oceania':2,
    'Asia':3,
    'South America':4,
    'North America':5,
    'Europe':6
}
sactter_line = student[['student_ratio_cont','region']].drop_duplicates()
sactter_line["region_y"] = [region_y[i]-1 for i in sactter_line['region']]
sactter_line

结果如下:

(4)用于构建另类图例的数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
legend_data = student[['x','y','region']]
legend_data.head()

结果如下(部分):

03. 可视化绘制

本文的可视化绘制过程涉及seaborn的stripplot()方法,所需的库、总体设置及用于绘制“抖动”的散点图(类似ggplot2的position_jitter()),其目的就是为了防止散点重叠。如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import seaborn as sns
import matplotlib.lines as mlines
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from matplotlib.patches import Rectangle

plt.rcParams['font.family'] = ['Roboto Mono']
fig, ax = plt.subplots(figsize=(10,6),dpi = 200,facecolor='#323332',edgecolor='#323332')
ax.set_facecolor("#323332")
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sns.stripplot(x="student_ratio", y="region",order=order,palette=palette, data=student,
              size = 8,alpha=.4,edgecolor = "white",linewidth=.8,zorder=0,ax=ax)

添加点线的连接,具体如下(部分代码也给出解释):不明白的地方可以参考我之前的推文Matplotlib 气球图 制作,或者后台发消息咨询。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# #添加 点线 图层
def newline(p1, p2):
    ax = plt.gca()
    l = mlines.Line2D([p1[0],p2[0]], [p1[1],p2[1]],color='#FFFFFF',
                      lw=1.8,zorder = 0)
    ax.add_line(l)
    return l
for p1, p2 in zip(sactter_line['student_ratio_cont'], sactter_line['region_y']):
    newline([world_avg,p2], [p1,p2])
#添加散点
for i,j,c in zip(sactter_line['student_ratio_cont'], sactter_line['region_y'],sactter_line['region']):
    ax.scatter(i,j,c=region_color[c],s = 170,ec = 'white',lw=.8,zorder=1)

ax.tick_params(labelsize = 15,direction = 'out',colors = '#FFFFFF')
ax.set_xticks(np.arange(-5,100,10))
#设置轴脊颜色及宽度
for spine in ['top','bottom','left','right']:
    ax.spines[spine].set_color("#FFFFFF")
    ax.spines[spine].set_linewidth(1.5)
#隐藏xy轴的label
ax.set_xlabel('')
ax.set_ylabel('')
ax.invert_yaxis()

添加另类图例(地图图例)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#添加另类图例
axins = inset_axes(ax, width=2.3, height=1.5)
for x,y,c in zip(legend_data.x,legend_data.y,legend_data.region):
    rect = Rectangle((x+1,y+1),width=.5,height=.5, color=region_color[c])
    axins.add_patch(rect)
axins.set_xticks([])
axins.set_xlim(left=-5,right=35)
axins.set_yticks([])
axins.set_ylim(top=30,bottom=-5)
axins.invert_yaxis()
axins.axis('off')

这一步用到了matplotlib的axes插入方法,绘制大小图或者中国地图十段线部分均可用此方法进行绘制。这里也用到了之前构造的lengend_data、region_color,然后使用 Rectangle()绘制矩形,再使用 axins.add_patch(rect)方法进行多矩形绘制。ggplot2的geom_tile()也可实现矩形图表的绘制。

绘制文本及指示箭头,代码如下(部分):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ax.annotate(s="Worldwide average:\n{} students per teacher".format(round(world_avg,1)),
            xy=(world_avg,4.5),xytext=(40,5),ha="center",va="center",size=12,c='#FFFFFF',
            family='Poppins', 
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc3,rad=-0.3",
                            fc="gray",ec='#FFFFFF')
           )

完整代码如下:

最终可视化效果如下:

如果没用采用地图图例的绘制,而是一般的散点图图例,效果如下:

图例绘制方法如下(部分):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#添加图例
region_legend = ax.legend(fontsize=10,markerscale =1.2,title = 'Region',frameon=False,
                         title_fontsize = 15)
#region_legend.get_title().set_fontsize(fontsize = 13)#面向对象
region_legend.get_title().set_color("#FFFFFF")
region_legend.get_frame().set_facecolor('#323332')
#修改图例属性颜色:图例文字颜色设置
for text in region_legend.get_texts():
    text.set_color('#FFFFFF')

04. 总结

Matplotlib对绘制大多数图表还是比较友好的,也是比较容易定制化自己的绘图需求(需熟悉太多的绘图函数

),但涉及统计图表的绘制,可以结合seaborn进行绘制,使绘图事半功倍哦!!绘图的颜色搭配对绘图结果至关重要,自己现阶段也是在摸索和模仿,有好的颜色搭配学习网站或者资源,可以进群交流。本文能力有限,有错误的地方或者不理解的地方,可以后台咨询或者进行讨论,期待你的加入。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
手把手教你用Matplotlib画一个小清新配色的商业图表
导读:本文使用小清新配色对散点图和折线图进行另类的绘制,绘制出让人耳目一新的商业图表可视化作品。
IT阅读排行榜
2020/09/08
1.1K0
手把手教你用Matplotlib画一个小清新配色的商业图表
数据可视化 | 双Y轴可视化绘制方法(Python、R两种方法)
最近有很多小伙伴私信我关于双Y轴图的绘制方法? 这里给出Python-matplotlib绘制方法和R-ggplot2的绘制方法
郭好奇同学
2020/12/28
1.9K0
数据可视化 | 双Y轴可视化绘制方法(Python、R两种方法)
Python-matplotlib 散点图绘制02
这篇推文还是python-matplotlib 散点图的绘制过程,涉及到的内容主要包括matplotlib ax.scatter()、hlines()、vlines()、text()、添加小图片和定制化散点图图例样式等。前期的数据处理部分还是pandas、numpy库的灵活 应用(这里主要涉及可视化的设置,数据处理、分析部分后期会专门开设专辑进行教程讲解。当然大家有不理解地方可以后台和我交流)
DataCharm
2021/02/22
1K0
Python-matplotlib 散点图绘制02
善用图片-你将有不一样的可视化效果
今天在查找资料时发现了一个超酷的R语言第三方颜色包 R-ghibli,目前可以直接通过 CRAN 安装的。官网(https://ewenme.github.io/ghibli/)所示的图例如下:
DataCharm
2021/02/22
4380
善用图片-你将有不一样的可视化效果
Python-matplotlib 箱线图绘制
箱线图(Boxplot) 是一种用作显示一组数据分散情况资料的统计图表,本期推文就如何使用matplotlib和seaborn 绘制出高度定制化的箱线图做出详细的讲解。
DataCharm
2021/02/22
4.4K0
Python-matplotlib 箱线图绘制
绘图文本重叠怎么办?R-ggrepel和Python-adjustText 帮你解决
在进行数据可视化作品绘制时,我们需要在相应位置添加文本标签进行标注或者解释说明使用,少量数据点进行标注时相对简单,也比较明确,当需要标注的数据较多、或集中在一个区域时,标注文本就会产生相互叠加,影响标注内容和美观。如下:
DataCharm
2021/02/22
3.7K0
绘图文本重叠怎么办?R-ggrepel和Python-adjustText 帮你解决
经济学人风格图表的Python-Seaborn和R-ggplot2绘制
最近着手准备使用R-ggpot2进行图表绘制,当然,Python可视化图表绘制也不能落下,所以,后面的推文我尽量会推出两种教程
DataCharm
2021/02/22
9520
经济学人风格图表的Python-Seaborn和R-ggplot2绘制
另类地图的Python和R绘制
由于最近开始使用R-ggplot2绘制一些可视化作品,也慢慢发现ggplot2绘图的方便之处,但毕竟开始于Python绘图,我们也不能落下
DataCharm
2021/02/22
1K0
另类地图的Python和R绘制
关系(一)利用python绘制散点图
散点图可以了解数据之间的各种相关性,如正比、反比、无相关、线性、指数级、 U形等,而且也可以通过数据点的密度(辅助拟合趋势线)来确定相关性的强度。另外,也可以探索出异常值(在远超出一般聚集区域的数据点称)。
HsuHeinrich
2024/03/26
3300
关系(一)利用python绘制散点图
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
参考:Rougier N P, Droettboom M, Bourne P E, et al. Ten Simple Rules for Better Figures[J]. PLOS Computational Biology【IF 4.7】, 2014, 10(9).感兴趣戳:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4161295/pdf/pcbi.1003833.pdf
DataCharm
2021/02/22
1.5K0
Matplotlib 1.4W+字基础教程来了(收藏吃灰去吧~~)
Python-seaborn 基础图表绘制-散点图
上期推文推出第一篇基础图表绘制-R-ggplot2 基础图表绘制-散点图 的绘制推文,得到了很多小伙伴的喜欢,也是我更加想使这个系列做的更加完善和系统,我之前也有说过,会推出Python和R的两个版本绘制教程,接下来我们就推出基础散点图的Python绘制版本。本期主要涉及的知识点如下:
数据森麟
2020/11/23
1.6K0
Python-seaborn 基础图表绘制-散点图
Python-matplotlib 多类别学术散点图制作
本期推文回归学术图表的绘制教程,本次的推文也是在查看SCI论文时发现,图表简单明了且使用较多,接下来我们通过构建虚拟数据进行符合出版的多类别散点图绘制。
DataCharm
2021/02/22
8610
Python-matplotlib 多类别学术散点图制作
Matplotlib 可视化之图表层次结构
今天云朵君给大家系统介绍Matplotlib图表层次结构,通过步骤分解,详细了解一个图表绘制的过程 。
数据STUDIO
2022/04/11
4.4K0
Matplotlib 可视化之图表层次结构
Python-matplotlib 学术散点图 EE 统计及绘制
之前的绘制图文Python-matplotlib 学术散点图完善Python-matplotlib 学术型散点图绘制 教程中,对学术散点图已经进行了较为完善的绘制教程,但这几天的通过准备 论文图表再现计划 以及后台小伙伴的留言,发现在绘制的相关性散点图中,各个范围的 Expected Error (EE)的统计个数没有在图表中进行展示 ,即下图中左下角的信息没有绘制。
DataCharm
2021/02/22
9620
Python-matplotlib 学术散点图 EE 统计及绘制
超简单的置信区间拟合散点图绘制方法推荐~~
今天这篇推文小编写一些基础的内容:如何绘制在散点图上显示其线性模型线性模型的拟合结果及其置信区间。这里小编使用R和Python分别绘制,主要内容如下:
DataCharm
2022/10/25
3.5K0
超简单的置信区间拟合散点图绘制方法推荐~~
数据可视化 | seaborn绘制散点图
由于涉及的图表类型为多类别散点图的绘制,在使用常规matplotlib进行绘制时会显得格外繁琐,所以我们选择了对matplotlib进行了更高级的API封装,使作图更加容易的seaborn包进行图表的绘制,更多seaborn 介绍,大家可以直接去seaborn官网进行相关资料的查阅。数据的读取使用的功能强大的数据处理包 pandas ,这里只是进行简单的删除空值操作,直接使用dropna() 函数操作即可,我们直接预览数据,如下(部分):
郭好奇同学
2020/11/25
1.9K0
数据可视化 | seaborn绘制散点图
matplotlib入门
MATlAB是美国MathWorks公司出品的商业数学软件,用于数据分析、无线通信、深度学习、量化金融与风险管理、机器人,控制系统等领域。MATLAB在数值计算方面首屈一指,也是使用最广泛的科研绘图软件之一。优点:编程效率高 便于矩阵计算。缺点:循环效率低 封装性不好。
用户2225445
2022/11/12
4.4K0
matplotlib入门
Python-matplotlib 学术散点图完善
上期的推文Python-matplotlib 学术型散点图绘制 推出后,很多小伙伴比较喜欢
气象学家
2020/07/15
2.3K0
Python-matplotlib 商业图表仿制第7弹
虽然小伙伴们喜欢空间绘图方面的居多(毕竟这方面的小伙伴居多),但商业图表的绘制也不能放下哦!本期就推出一篇商业图表的仿制教程。主要涉及内容如下:
DataCharm
2021/02/22
3420
Python-matplotlib 商业图表仿制第7弹
Python-matplotlib 横向堆积柱状图绘制
,经群里爱学习的小伙伴们提醒,居然漏了一个常用的柱状图形式。看吧····知识点还是没有系统起来(最近也在对各种图表进行系统规整哦,包括学术和商业的
DataCharm
2021/02/22
6.5K1
Python-matplotlib 横向堆积柱状图绘制
相关推荐
手把手教你用Matplotlib画一个小清新配色的商业图表
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档