python绘制云雨图raincloud plot

官方github: https://github.com/RainCloudPlots/RainCloudPlots

Raincloud 的 Python 实现是一个名为 PtitPrince 的包,它写在 seaborn 之上,这是一个 Python 绘图库,用于从 pandas 数据帧中获取漂亮的绘图。

import pandas as pd
import seaborn as sns
import os
import matplotlib.pyplot as plt
#sns.set(style="darkgrid")
#sns.set(style="whitegrid")
#sns.set_style("white")
sns.set(style="whitegrid",font_scale=2)
import matplotlib.collections as clt
import ptitprince as pt
#图片保存及输出设置
savefigs = True
figs_dir = '../figs/tutorial_python'
if savefigs:
    # Make the figures folder if it doesn't yet exist
    #如果没有找到文件夹,先创建此文件夹
    if not os.path.isdir('../figs/tutorial_python'):
        os.makedirs('../figs/tutorial_python')

def export_fig(axis,text, fname):
    if savefigs:
        axis.text()
        axis.savefig(fname, bbox_inches='tight')     
df = pd.read_csv ("simdat.csv", sep= ",")
df.head()

该图可以让读者初步了解数据集:哪个组的平均值更大,这种差异是否可能显着。 此图中仅显示每组分数的平均值和标准差。

f, ax = plt.subplots(figsize=(7, 7))
sns.barplot(x = "group", y = "score", data = df, capsize= .1)
plt.title("Figure P1\n Bar Plot")
if savefigs:
    plt.savefig('.\\figs\\tutorial_python\\figureP01.png', bbox_inches='tight')

为了了解我们的数据集的分布,我们可以绘制一个“云”,即直方图的平滑版本:

# plotting the clouds
f, ax = plt.subplots(figsize=(7, 5))
dy="group"
dx="score"
ort="h"
pal = sns.color_palette(n_colors=1)
ax=pt.half_violinplot(x=dx, y=dy, data=df, palette=pal, bw=.2, cut=0., scale="area", width=.6, inner=None, orient=ort)
plt.title("Figure P2\n Basic Rainclouds")
if savefigs:
    plt.savefig('.\\figs\\tutorial_python\\figureP02.png', bbox_inches='tight')

为了更精确地了解分布并说明数据中的潜在异常值或其他模式,我们现在添加“雨”,即数据点的简单单维表示:

# adding the rain
f, ax=plt.subplots(figsize=(7, 5))
ax=pt.half_violinplot(x=dx, y=dy, data=df, palette=pal, bw=.2, cut=0., scale="area", width=.6, inner=None, orient=ort)
ax=sns.stripplot(x=dx, y=dy, data=df, palette=pal, edgecolor="white", size=3, jitter=0, zorder=0, orient=ort)
plt.title("Figure P3\n Raincloud Without Jitter")
if savefigs:
    plt.savefig('.\\figs\\tutorial_python\\figureP03.png', bbox_inches='tight')

# adding jitter to the rain
f, ax =plt.subplots(figsize=(7, 5))
ax=pt.half_violinplot(x=dx, y=dy, data=df, palette=pal, bw=.2, cut=0., scale="area", width=.6, inner=None, orient=ort)
ax=sns.stripplot(x=dx, y=dy, data=df, palette=pal, edgecolor="white", size=3, jitter=1, zorder=0, orient=ort)
plt.title("Figure P4\n Raincloud with Jittered Data")
if savefigs:
    plt.savefig('.\\figs\\tutorial_python\\figureP04.png', bbox_inches='tight')

这样可以很好地了解数据点的分布情况,但中位数和四分位数并不明显,很难一目了然地确定统计差异。 因此,我们添加了一个“空”箱线图来显示中位数、四分位数和异常值:

#adding the boxplot with quartiles
f, ax=plt.subplots(figsize=(7, 5))
ax=pt.half_violinplot(x=dx, y=dy, data=df, palette=pal, bw=.2, cut=0.,
                      scale="area", width=.6, inner=None, orient=ort)
ax=sns.stripplot(x=dx, y=dy, data=df, palette=pal, edgecolor="white",
                 size=3, jitter=1, zorder=0, orient=ort)
ax=sns.boxplot(x=dx, y=dy, data=df, color="black", width=.15, zorder=10,
               showcaps=True, boxprops={'facecolor':'none',"zorder":10},
               showfliers=True, whiskerprops{'linewidth':2,"zorder":10},
               saturation=1, orient=ort)
plt.title("Figure P5\n Raincloud with Boxplot")
if savefigs:
    plt.savefig('../figs/tutorial_python/figureP05.png', bbox_inches='tight')

现在我们可以设置一个调色板来表征两组:

#adding color
pal="Set2"
f, ax=plt.subplots(figsize=(7, 5))
ax=pt.half_violinplot(x=dx, y=dy, data=df, palette=pal, bw=.2, cut=0.,
                      scale="area", width=.6, inner=None, orient=ort)
ax=sns.stripplot(x=dx, y=dy, data=df, palette=pal, edgecolor="white",
                 size=3, jitter=1, zorder=0, orient=ort)
ax=sns.boxplot(x=dx, y=dy, data=df, color="black", width=.15, zorder=10,
              showcaps=True, boxprops={'facecolor':'none',"zorder":10},
              showfliers=True, whiskerprops={'linewidth':2,"zorder":10},
              saturation=1, orient=ort)
plt.title("Figure P6\n Tweaking the Colour of Your Raincloud")

我们可以使用函数 pt.Raincloud 来添加一些自动化:

#same thing with a single command: now x **must** be the categorical value
dx="group"; dy="score"; ort="h"; pal="Set2"; sigma=.2
f, ax=plt.subplots(figsize=(7, 5))
pt.RainCloud(x=dx, y=dy, data=df, palette=pal, bw=sigma,
             width_viol = .6, ax = ax, orient = ort)
plt.title("Figure P7\n Using the pt.Raincloud function")
if savefigs:
    plt.savefig('../figs/tutorial_python/figureP07.png', bbox_inches='tight')

‘move’ 参数可用于移动箱线图下方的雨量,在某些情况下提供更好的原始数据可见性:

#moving the rain below the boxplot
dx="group"; dy="score"; ort="h"; pal="Set2"; sigma=.2
f,ax=plt.subplots(figsize=(7, 5))
ax=pt.RainCloud(x=dx, y=dy, data=df, palette=pal, bw=sigma,
                 width_viol=.6, ax=ax, orient=ort, move=.2)
plt.title("Figure P8\n Rainclouds with Shifted Rain")

此外,raincloud 函数同样适用于列表或 np.array,如果您更喜欢使用它们而不是数据框输入:

# Usage with a list/np.array input
dx=list(df["group"]); dy=list(df["score"])
f, ax=plt.subplots(figsize=(7, 5))
ax=pt.RainCloud(x=dx, y=dy, palette=pal, bw=sigma,
                 width_viol=.6, ax=ax, orient=ort)
plt.title("Figure P9\n Rainclouds with List/Array Inputs")

对于某些数据,您可能希望将雨云的方向翻转为“petit prince”图。 您可以使用 pt.RainCloud 函数中的 ‘orient’ 标志来执行此操作:

# Changing orientation
dx="group"; dy="score"; ort="v"; pal="Set2"; sigma=.2
f, ax=plt.subplots(figsize=(7, 5))
ax=pt.RainCloud(x=dx, y=dy, data=df, palette=pal, bw=sigma,
                 width_viol=.5, ax=ax, orient=ort)
plt.title("Figure P10\n Flipping your Rainclouds")

还可以更改用于生成数据概率分布函数的平滑核。 为此,您调整 sigma 参数:

#changing cloud smoothness
dx="group"; dy="score"; ort="h"; pal="Set2"; sigma=.05
f, ax=plt.subplots(figsize=(7, 5))
ax=pt.RainCloud(x=dx, y=dy, data=df, palette=pal, bw=sigma,
                 width_viol=.6, ax=ax, orient=ort)
plt.title("Figure P11\n Customizing Raincloud Smoothness")

最后,使用 pointplot 标志,您可以添加一条连接组平均值的线。 这对于更复杂的数据集很有用,例如重复测量或因子数据。 下面我们通过改变各个图的色调、不透明度或闪避元素来说明使用雨云绘制此类数据的几种不同方法:

#adding a red line connecting the groups' mean value (useful for longitudinal data)
dx="group"; dy="score"; ort="h"; pal="Set2"; sigma=.2
f, ax=plt.subplots(figsize=(7, 5))
ax=pt.RainCloud(x=dx, y=dy, data=df, palette=pal, bw=sigma,
                 width_viol=.6, ax=ax, orient=ort, pointplot=True)
plt.title("Figure P12\n Adding Lineplots to Emphasize Factorial Effects")

另一个灵活的选择是使用 Facet Grids 来分隔不同的组或因子水平,

如下所示:

# Rainclouds with FacetGrid
g=sns.FacetGrid(df, col="gr2", height=6)
g=g.map_dataframe(pt.RainCloud, x="group", y="score", data=df, orient="h")
g.fig.subplots_adjust(top=0.75)
g.fig.suptitle("Figure P13\n Using FacetGrid for More Complex Designs",  fontsize=26)

作为一种替代方法,可以使用色调输入将不同的子组直接绘制在彼此之上,从而促进它们的比较:

# Hue Input for Subgroups
dx="group"; dy="score"; dhue="gr2"; ort="h"; pal="Set2"; sigma=.2
f, ax=plt.subplots(figsize=(12, 5))
ax=pt.RainCloud(x=dx, y=dy, hue=dhue, data=df, palette=pal, bw=sigma,
                 width_viol=.7, ax=ax, orient=ort)
plt.title("Figure P14\n Rainclouds with Subgroups")

为了提高该图的可读性,我们使用相关标志(0-1 alpha 强度)调整 alpha 级别:

# Setting alpha level
f, ax=plt.subplots(figsize=(12, 5))
ax=pt.RainCloud(x=dx, y=dy, hue=dhue, data=df, palette=pal, bw=sigma,
                 width_viol=.7, ax=ax, orient=ort , alpha=.65)
plt.title("Figure P15\n Adjusting Raincloud Alpha Level")

我们可以将 dodge 标志设置为 true,而不是让两个箱线图相互混淆,从而增加交互性:

#The Doge Flag
f, ax=plt.subplots(figsize=(12, 5))
ax=pt.RainCloud(x=dx, y=dy, hue=dhue, data=df, palette=pal, bw=sigma,
                 width_viol=.7, ax=ax, orient=ort , alpha=.65, dodge=True)
plt.title("Figure P16\n The Boxplot Dodge Flag")

最后,我们可能希望在我们的图表中添加一个传统的线图,以帮助检测因子主效应和交互作用。

例如,我们在每个箱线图中绘制了平均值:

#same, with dodging and line
f, ax=plt.subplots(figsize=(12, 5))
ax=pt.RainCloud(x=dx, y=dy, hue=dhue, data=df, palette=pal, bw=sigma,
                width_viol=.7, ax=ax, orient=ort , alpha=.65,
                dodge=True, pointplot=True)
plt.title("Figure P17\n Dodged Boxplots with Lineplots")

这是相同的图,但现在使用“移动”参数再次将单个观测值移动到箱线图下方:

#moving the rain under the boxplot
f, ax=plt.subplots(figsize=(12, 5))
ax=pt.RainCloud(x=dx, y=dy, hue=dhue, data=df, palette=pal, bw=sigma,
               width_viol=.7, ax=ax, orient=ort , alpha=.65, dodge=True,
               pointplot=True, move=.2)
plt.title("Figure P18\n Shifting the Rain with the Move Parameter")

作为我们的最后一个示例,我们将考虑具有两组和三个时间点的复杂重复测量设计。 目标是说明我们复杂的相互作用和主要影响,同时保持雨云图的透明性:

# Load in the repeated data
df_rep=pd.read_csv("repeated_measures_data.csv", sep=",")
df_rep.columns=["score",  "timepoint", "group"]
df_rep.head()

# Plot the repeated measures data
dx="group"; dy="score"; dhue="timepoint"; ort="h"; pal="Set2"; sigma=.2
f, ax=plt.subplots(figsize=(12, 5))
ax=pt.RainCloud(x=dx, y=dy, hue=dhue, data=df_rep, palette=pal, bw=sigma, width_viol=.7,
               ax=ax, orient=ort , alpha=.65, dodge=True, pointplot=True, move=.2)
plt.title("Figure P19\n Repeated Measures Data - Example 1")

# Now with the group as hue
dx="timepoint"; dy="score"; dhue="group"
f, ax=plt.subplots(figsize=(12, 5))
ax=pt.RainCloud(x=dx, y=dy, hue=dhue, data=df_rep, palette=pal, bw=sigma, width_viol=.7,
                ax=ax, orient=ort , alpha=.65, dodge=True, pointplot=True, move=.2)
plt.title("Figure P20\n  Repeated Measures Data - Example 2")

到此这篇关于python绘制云雨图raincloud plot的文章就介绍到这了,更多相关python绘制云雨图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python Matplotlib绘制箱线图boxplot()函数详解

    目录 箱线图 boxplot()函数还提供了丰富的自定义选项 箱线图通常用在多组数据比较时 补充:plt.boxplot()函数绘制箱图.常用方法 实战 常用方法 总结 箱线图 箱线图一般用来展现数据的分布,如上下四分位值.中位数等,也可以直观地展示异常点.Matplotlib提供了boxplot()函数绘制箱线图. import matplotlib.pyplot as plt _ = plt.boxplot(range(10)) # 10个数,0-9 plt.show() 箱线图虽然看起来简

  • Python可视化神器pyecharts绘制折线图详情

    目录 折线图介绍 折线图模板系列 双折线图(气温最高最低温度趋势显示) 面积折线图(紧贴Y轴) 简单折线图(无动态和数据标签) 连接空白数据折线图 对数轴折线图示例 折线图堆叠(适合多个折线图展示) 二维曲线折线图(两个数据) 多维度折线图(颜色对比) 阶梯折线图 js高渲染折线图 折线图介绍 折线图和柱状图一样是我们日常可视化最多的一个图例,当然它的优势和适用场景相信大家肯定不陌生,要想快速的得出趋势,抓住趋势二字,就会很快的想到要用折线图来表示了.折线图是通过直线将这些点按照某种顺序连接起来

  • python matplotlib库绘图实战之绘制散点图

    目录 一.导入库 二.设置文字 三.设置坐标轴参数 四.绘制点 五.对点的继续处理 1.自定义颜色 2.颜色映射 补充1 补充2 补充3 总结 一.导入库 import matplotlib.pyplot as plt 二.设置文字 plt.title("double number", fontsize=24) plt.xlabel("number", fontsize=14) plt.ylabel("double", fontsize=14)

  • Python绘制散点图之可视化神器pyecharts

    目录 散点图 什么是散点图? 散点图有什么用处? 散点图的基本构成要素 散点图模板系列 简单散点图 多维数据散点图 散点图显示分割线 散点图凸出大小(二维) 3D散点图展示 动态涟漪散点图 箭头标志散点图 散点图 什么是散点图? 散点图是指在数理统计回归分析中,数据点在直角坐标系平面上的分布图, 散点图​​表示因变量随自变量而变化的大致趋势,由此趋势可以选择合适的函数进行经验分布的拟合,进而找到变量之间的函数关系. 散点图有什么用处? 1.数据用图表来展示,显然比较直观,在工作汇报等场合能起到事

  • Python可视化神器pyecharts之绘制地理图表练习

    目录 炫酷地图 3D炫酷地图模板系列 重庆市3D地图展示 中国3D地图 中国3D数据地图(适合做数据可视化) 全国行政区地图(带城市名字) 地球展示 炫酷地图 前期我们介绍了很多的地图模板,不管是全球的还是中国的,其实我感觉都十分的炫酷,哈哈哈,可是还有更加神奇的,更加炫酷的地图模板,下面让我们一起一饱眼福吧! 3D炫酷地图模板系列 重庆市3D地图展示 from pyecharts import options as opts from pyecharts.charts import Map3D

  • Python可视化神器pyecharts之绘制箱形图

    目录 箱形图 概念 用处 箱形图系列模板 第一个箱形图 复杂一点的图例 箱形图 概念 后面的图形都是一些专业的统计图形,当然也会是我们可视化的对象. 箱形图(Box-plot)又称为盒须图.盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在各种领域也经常被使用,常见于​​品质管理​​.它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比 较.箱线图的绘制方法是:先找出一组数据的上边缘.下边缘.中位数和两个四分位数:然后, 连接两个四分位数画出箱体:再将

  • python绘制云雨图raincloud plot

    官方github: https://github.com/RainCloudPlots/RainCloudPlots Raincloud 的 Python 实现是一个名为 PtitPrince 的包,它写在 seaborn 之上,这是一个 Python 绘图库,用于从 pandas 数据帧中获取漂亮的绘图. import pandas as pd import seaborn as sns import os import matplotlib.pyplot as plt #sns.set(st

  • PYTHON绘制雷达图代码实例

    这篇文章主要介绍了PYTHON绘制雷达图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.雷达图 import matplotlib.pyplot as plt import numpy as np values = [0.09,-0.05,0.20,-0.02,0.08,0.09,0.03,0.027] x = np.linspace(0,2*np.pi,9)[:-1] c = np.random.random(size=(8,3)

  • Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子

    根据我们指定的条件检索函数中的元素 import matplotlib.pyplot as plt import numpy as np a = np.linspace(0, 2 * np.pi, 50) b = np.sin(a) plt.plot(a,b) #生成一个正弦函数图 mask = b >= 0 plt.plot(a[mask], b[mask], 'bo') #符合条件的标注蓝色圆点 mask = (b >= 0) & (a <= np.pi / 2) plt.p

  • Python绘制组合图的示例

    绘制组合图: 组合图就是将多个形状,组合到⼀个图形中,主要作⽤是节约作图的空间,节省读者的时间,从⽽提⾼ 信息传达的效率. import pandas as pd import numpy as np import matplotlib.pyplot as plt def plot_combination1(): sale = pd.read_excel('./data/每月目标销售额和实际销售额.xlsx',header=0,index_col=0) # 设置正常显示中文标签 plt.rcPa

  • python绘制趋势图的示例

    import matplotlib.pyplot as plt #plt用于显示图片 import matplotlib.image as mping #mping用于读取图片 import datetime as dt import matplotlib.dates as mdates from pylab import * def draw_trend_chart(dates,y): mpl.rcParams['font.sans-serif'] = ['SimHei'] #指定默认字体 m

  • python 绘制斜率图进行对比分析

    你好,我是林骥. 斜率图,可以快速展现两组数据之间各维度的变化,特别适合用于对比两个时间点的数据. 比如说,为了对比分析某产品不同功能的用户满意度,经过问卷调查和数据统计,得到下面这个调查结果: 你不妨自己先思考一下,如何对这组数据进行可视化,才能让信息传递变得更加高效? 下面是我用 matplotlib 制作的图表: 从图中可以直观地看出,功能 C 的用户满意度明显下降,我们用比较鲜明的橙色来表示,以便引起观众重点关注:功能 D 和功能 E 的用户满意度明显提升,我们用蓝色表示,代表数据正在向

  • Python绘制雷达图时遇到的坑的解决

    ValueError: The number of FixedLocator locations (9), usually from a call to set_ticks, does not match the number of ticklabels (8). 运行书中例题时发现了这个错误, 原代码如上: import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.rcParams['font

  • 手把手教你使用Python绘制时间序列图

    目录 01从Quandl检索数据集 02绘制收盘价与成交量的关系图 03绘制烛台图 导读:分析时间序列数据的一种简单而有效的方法就是将时间序列数据可视化在一个图表上,这样我们就可以从中推断出某些假设.本文将以股价数据集为例,指导你从Quandl下载股价数据集,并将这些数据绘制在价格和成交量图表上.还将教大家绘制烛台图,比起直线图表,这将给我们更多的信息. 01从Quandl检索数据集 Quandl简介 Quandl是一个为金融.经济和另类数据服务的平台,这些数据由各种数据发布商提供,包括联合国.

  • python绘制折线图和条形图的方法

    本文实例为大家分享了python绘制折线图和条形图的具体代码,供大家参考,具体内容如下 最近开始写小论文啦,中间不免要作各种各样的图,学习后自己作了个小笔记,供小伙伴一起学习哦. 折线图 import matplotlib.pyplot as plt #x轴取值不一样时 # x1=[0,0.1,0.3,0.5,0.7,0.8,0.9] # y1=[0.7150,0.7147,0.7088,0.7029,0.6996,0.6942,0.5599] # x2=[0,0.1,0.2,0.5,0.6,0

  • 如何使用Python 绘制瀑布图

    目录 前言 瀑布图 瀑布图使用条件 举个例子 Plotly 绘制瀑布图 参数设置 完整代码 Matplotlib绘制瀑布图 总结 前言 在日常生活中,我们的工作有时候需要对数据进行可视化,让它一图标之类的呈现出来.图给人的感觉是最直观的,并且能够一眼就看到数据. 今天我们一起了解瀑布图的重要性,以及如何使用不同的绘图库(如 Matplotlib.Plotly)绘制瀑布图.瀑布图是一种二维图表,专门用于了解随着时间或多个步骤或变量的增量正负变化的影响.瀑布图也称为浮砖图.飞砖图. 瀑布图 瀑布图经

随机推荐