Seaborn:我只想要一个对数刻度

Posted

技术标签:

【中文标题】Seaborn:我只想要一个对数刻度【英文标题】:Seaborn: I just want a log scale 【发布时间】:2018-01-08 10:32:36 【问题描述】:

我正在使用 seaborn 绘制一些生物学数据。

我只想要一个基因相对于另一个基因的分布(在大约 300 名患者中表达),这一切都很好用 graph = sns.jointplot(x='Gene1',y='Gene2',data=data,kind='reg')

我喜欢这个图表给我一个很好的线性拟合和一个 PearsonR 和一个 P 值。

我想要的只是将我的数据绘制在对数刻度上,这是通常表示此类基因数据的方式。

我在网上查看了一些解决方案,但它们都摆脱了我的 PearsonR 值或线性拟合,或者它们看起来不太好。我是新手,但似乎在对数刻度上绘制图表应该不会太麻烦。

有什么方法或解决方案吗?

谢谢!

编辑:作为对 cme​​ts 的回应,我离我的答案越来越近了。我现在有一个图(如下所示),但我需要一条拟合线并进行一些统计。现在正在努力,但在此期间任何答案/建议都非常受欢迎。

【问题讨论】:

您尝试过哪些解决方案但拒绝了? 我看了这个:***.com/questions/26059979/… 但是尝试了这个解决方案,我的数据只有一条直线?我不确定出了什么问题,但它没有我想要的统计数据。 在调用情节之前,您是否尝试过设置轴? ***.com/a/40633595/8131703 【参考方案1】:
mybins=np.logspace(0, np.log(100), 100)

g = sns.JointGrid(data1, data2, data, xlim=[.5, 1000000],
                  ylim=[.1, 10000000])
g.plot_marginals(sns.distplot, color='blue', bins=mybins)
g = g.plot(sns.regplot, sns.distplot)
g = g.annotate(stats.pearsonr)

ax = g.ax_joint
ax.set_xscale('log')
ax.set_yscale('log')

g.ax_marg_x.set_xscale('log')
g.ax_marg_y.set_yscale('log')

这工作得很好。最后,我决定将我的表格值转换为log(x),因为这使得图表在短期内更容易缩放和可视化。

【讨论】:

以上是关于Seaborn:我只想要一个对数刻度的主要内容,如果未能解决你的问题,请参考以下文章

seaborn 热图的人工刻度标签

更改 Seaborn 热图中刻度标签的旋转

更改刻度名称后,如何修复 seaborn 条形图中缺少的条形?

更改 seaborn 热图颜色条上的刻度大小

在 Seaborn 热图中保留一些刻度

在 Python seaborn 包中控制刻度标签