【跟着SCI学作图】MatplotlibSeaborn绘制散点密度图直方图

news/2024/11/17 8:54:27/

【跟着SCI学作图】Matplotlib&Seaborn绘制散点密度图&直方图

01 引言:

最近读文献【Future increases in Arctic lightning and fire risk for permafrost carbon】发现文中图表的排版布局非常好,故借鉴一下。主要用的就是一个散点密度图+两个直方图。
在这里插入图片描述
论文中提供的数据如下图所示:
请添加图片描述
数据下载地址:
【https://www.nature.com/articles/s41558-021-01011-y#Sec17】

02 代码如下:

# -*- encoding: utf-8 -*-
'''
@File    :   png1.py
@Time    :   2022/12/27 20:28:31
@Author  :   HMX 
@Version :   1.0
@Contact :   kzdhb8023@163.com
'''
# here put the import lib
import pandas as pd
import os
import matplotlib.pyplot as plt
from scipy.stats import gaussian_kde
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
from matplotlib import ticker, cm
import seaborn as snsos.chdir(r'E:\CODE\work\plot7\png1\data')
# part a
# scatter
df = pd.read_csv('Fig1a_XY_obs.csv',index_col=0)
x,y = df.CxP.values,df.FR.values
xy = np.vstack([x,y])
z = gaussian_kde(xy)(xy)
idx = z.argsort()
x, y, z = x[idx], y[idx], z[idx]
fig, ax = plt.subplots(figsize=(6,6),dpi=100)
xcord=x
ycord=y
m = ((xcord*ycord).mean() - xcord.mean()* ycord.mean())/(pow(xcord,2).mean()-pow(xcord.mean(),2))
c = ycord.mean() - m*xcord.mean()
scatter=ax.scatter(x,y,c=z,s = 2)
divider=make_axes_locatable(ax)
ax.set_xlim(0,0.01)
ax.set_ylim(0,1.5)
ax.set_yticks(np.arange(0,1.51,0.5))
ax_histx = divider.append_axes("bottom", 1.2, pad=0.15)
ax_histy = divider.append_axes("right", 1.2, pad=0.15)
ax.set_xticklabels([])
# line 
ds = pd.read_csv('Fig1a_XY_mod.csv',index_col=0)
print(ds)
print(ds.columns)
ys = ['Y_pl', 'Y_pl_op', 'Y_sc', 'Y_li1', 'Y_np', 'Y_mean']
linestyles = ['-.','-.','-.','-.','-.','-']
colors = ['#723BA0','#8575D7','#8DCAD0','#E0C671','#9F795D','k']
labels = ['Power law','Power law (linear opt.)','Scale','Linear','Non-parametric','Mean']
for i in range(len(ys)):y = ds[ys[i]].valuesax.plot(ds.X,y,linestyle=linestyles[i],c = colors[i],label = labels[i])ax.legend(frameon=False)
ax.set_ylabel('Lightning flash rate (number per km$^{2}$ per month)')
ax.set_xticks([0,0.005,0.010])# part b
df2 = pd.read_csv('Fig1b_CxP.csv',index_col=0)
sns.histplot(df2['rcp'].values, kde=True,ax = ax_histx,edgecolor = 'w',bins=51)
sns.histplot(df2['hist'].values, kde=True,ax = ax_histx,edgecolor = 'w',bins=30,color = 'red')ax_histx.plot(1,1,label = 'Present day',c = '#D4A663')
ax_histx.plot(1,1,label = 'Future',c = '#0202FF')
ax_histx.legend(frameon=False)
ax_histx.set_ylabel('Norm. dist.')
ax_histx.set_xlabel('CAPE × Precip (W m$^{2}$)')ax_histx.set_xticks([0,0.005,0.010])
ax_histx.set_xticklabels([0,0.005,'0.010'])
ax_histx.set_xlim(0,0.01)
ax_histx.set_ylim(0,400)
ax_histx.set_yticks([0,200,400])
# part c
df3 = pd.read_csv('Fig1c_FR.csv',index_col=0)
ax_histy.set_xlabel('Norm. dist.')
ax_histy.set_yticks([])
ax_histy = ax_histy.twinx()
ax_histy.set_ylabel('Lightning flash rate (number per km$^{2}$ per month)',rotation = 270,labelpad = 15)
sns.histplot(y = df3['rcp'].values, kde=True,ax = ax_histy,edgecolor = 'w',bins=30)
sns.histplot(y = df3['hist'].values, kde=True,ax = ax_histy,color = 'red',edgecolor = 'w',bins=30)
ax_histy.set_xlim(350,0)
ax_histy.set_xticklabels([0,2.5])
ax_histy.set_ylim(0,1.5)
ax_histy.set_yticks(np.arange(0,1.51,0.5))
ax_histy.set_xlabel('Norm. dist.')
plt.rcParams['xtick.bottom'] = plt.rcParams['xtick.labelbottom'] = True
plt.rcParams['xtick.top'] = plt.rcParams['xtick.labeltop'] = False
plt.savefig('png1.png',dpi = 600)
plt.show()

03 结果如下:

在这里插入图片描述
以上就是本期推文的全部内容了,如果对你有帮助的话,请‘点赞’、‘收藏’,‘关注’,你们的支持是我更新的动力。


http://www.ppmy.cn/news/897870.html

相关文章

在processing中通过贝塞尔曲线作图

一般的processing函数只能绘制规则的图像或线条,但是想要较为精细的作图就比较困难,为了画出较为精细的图画,我们可以通过贝塞尔函数的代码,通过点和切线来获取线条的贝塞尔函数,[如图所示,a可以添加点&…

2023 RoboCom 世界机器人开发者大赛-本科组(省赛) CAIP 完整版题解

2023 RoboCom 世界机器人开发者大赛-本科组&#xff08;省赛) CAIP 完整版题解 题目之后出来再补 1 // // Created by trudbot on 2023/7/15. // #include <bits/stdc.h> using namespace std;int main () {int n; cin >> n;vector<vector<int>> a…

工业通讯 | STM32F4xx应用控制器与SoM集成 Ⅱ

上期回顾&#xff1a;工业通讯 | STM32F4xx应用控制器与SoM集成 STM32F4xx应用控制器与SoM集成 目录 1 介绍 2 准备工作 2.1 硬件要求 2.2 STM32F429I-Nucleo board 2.3 目标板系统 2.4 软件要求 2.4.1 STM32F4开发环境 2.4.2 交付清单 2.4.3 管理工具 2.4.4 GOAL和项…

PROFIBUS DP与Modbus/TCP网络转换操作指南(下)

上篇文章我们介绍了一些常用网关和网关配置软件的安装&#xff1b;这文章我们介绍一下相关网关参数的设置和网关的诊断。 本文以NT100-RE-DP网关为例&#xff0c;实现Modbus/TCP Client与PROFIBUS DP设备间的通讯&#xff0c;从而将PROFIBUS DP从站集成到Modbus/TCP网络中。下…

16个千兆光口8个千兆Combo光电复用口管理型工业以太网交换机环网+WEB管理+SNMP+VLAN

8*1000M路以太网电口&#xff0c;16路千兆光接口&#xff0c;支持SNMP网管&#xff0c;18ms内自愈环网保护&#xff0c;工作温度&#xff1a;-40℃&#xff5e;85℃。相对湿度&#xff1a;95% 3RH&#xff08;无凝结&#xff09;。传输距离40km&#xff08;其它数据接入共用&am…

STM32F4xx应用控制器与SoM集成

1 介绍 本文档介绍了使用STM32F4xx目标和开发环境STM32 Cube IDE为SoM集成提供的示例项目。 在文档中&#xff0c;给出了特殊建议&#xff0c;并带有两个符号&#xff1a; 特殊信息提示&#xff0c;以避免使用软件时出现常见的陷阱 防止软件故障或需要用户特别注意的特殊信…

HK50-CC-EN 网关操作指南

1 网关简介 本文以 HK50-CC-EN&#xff08;图&#xff11;&#xff09;实现 CC-Link 与 EtherNet/IP 转换为例&#xff0c;介绍 HK50 系列网关的使用步骤。 通过下载不同协议堆栈&#xff0c;HK50-CC-EN 能够实现不同的协议转换&#xff0c;主要有&#xff1a; CC-Link 从站转…

综治应急指挥中心建设方案

第三章 秦皇岛市综治&#xff08;应急&#xff09;指挥中心大厅建设 3.1指挥中心大屏显示系统 3.1.1 应用背景 根据项目的需求&#xff0c;本方案将以系统工程、信息工程、自动化控制等理论为指导&#xff0c;综合运用计算机、网络通讯、信号控制、视频监控等高新技术&…