在 plotly express violin plot 中将 x 轴视为分类
Posted
技术标签:
【中文标题】在 plotly express violin plot 中将 x 轴视为分类【英文标题】:Treat x axis as categorical in plotly express violin plot 【发布时间】:2021-12-23 04:20:44 【问题描述】:我有一个数据集 df[type, x, y] - [96 rows x 3 columns]。 x 有 4 个唯一值:(0. 0.322, 1.89, 3.460)
这是一个示例:
print (df.groupby('x').apply(lambda df: df.sample(4)))
OUT:
type x y
x
0.000 5 2 0.000 1123
6 2 0.000 1178
7 2 0.000 850
3 1 0.000 515
0.322 72 1 0.322 174
42 1 0.322 182
79 2 0.322 450
10 1 0.322 340
1.890 54 2 1.890 140
71 2 1.890 126
80 1 1.890 61
19 1 1.890 60
3.460 30 2 3.460 120
88 1 3.460 35
26 1 3.460 40
92 2 3.460 98
我正在使用 plotly express 来制作 小提琴图,但是由于 我的 x 值间隔不均匀,它是 >拉伸我的 x 轴 导致难以阅读:
fig = px.violin(df, y="y", x="x", color="type", box=True, violinmode='overlay',points="all",
hover_data=df.columns)
fig.show()
Plotly express 有没有办法将 x 轴视为分类 - 所以不要拉伸它?
【问题讨论】:
将 x 转换为字符串? 我尝试使用 df["x"] = df["x"].astype("str") 并且我的类型是:type object x object y int64 dtype: object.但是图表是一样的。 【参考方案1】:您可以将 xaxes 设置为分类:
fig.update_xaxes(type='category')
例如,我创建了一个与您非常相似的 DataFrame,其中 x
列也是数字,现在 Plotly 将在绘图时将其解释为分类,每个唯一 x 值之间的间距均匀:
import numpy as np
import pandas as pd
import plotly.express as px
## create some data similar to yours with 80 rows
np.random.seed(42)
values = np.random.randint(30,size=80)
df = pd.DataFrame(
'x':[0,0.322,1.89,3.46]*20,
'y':np.random.randint(30,size=80),
'type':[1]*40 + [2]*40
)
fig = px.violin(df, y="y", x="x", color="type", box=True, violinmode='overlay',points="all",hover_data=df.columns)
fig.update_xaxes(type='category')
fig.show()
【讨论】:
此解决方案确实会删除额外的刻度,但不会压缩它。我希望忽略不同 x 值之间的数值距离,以便所有内容均匀分布且可读 是否将 x 的列类型更改为字符串,然后传递tickvals = ['0.0', '0.322', '1.89', '3.460']
工作?
我试过了,但它仍然无法将它们解释为数字。
好的,我想我有更好的工作解决方案!
太棒了,谢谢!【参考方案2】:
我找到了一个好的解决方法
我在 df["x"] 中添加了一个“-”字符
df["x"]=df['x'].astype(str) + "-"
fig = px.violin(df, y="y", x="x", color="type", box=True, violinmode='overlay',points="all",
hover_data=df.columns)
fig.show()
仅仅添加一个空格“”是行不通的。
如果有人有更好的解决方案,请发布。
【讨论】:
以上是关于在 plotly express violin plot 中将 x 轴视为分类的主要内容,如果未能解决你的问题,请参考以下文章
R语言plotly可视化:plotly可视化基础小提琴图(basic violin plot in R with plotly)
R语言plotly可视化:plotly可视化分组(grouped)小提琴图(grouped violin plot in R with plotly)
R语言plotly可视化:plotly可视化多分类变量小提琴图(multiple variable violin plot in R with plotly)
R语言ggplot2可视化:可视化分组的小提琴图(violin plot)并在分组小提琴内部嵌入箱图(box plot)
seaborn使用Catplot函数可视化水平小提琴图(Make Horizontal Violin Plot with Catplot in Seaborn)
R语言ggplot2可视化小提琴图(violin plot)并使用ggsignif添加分组显著性(significance)标签