将直方图从 matplotlib 导入到 plotly

Posted

技术标签:

【中文标题】将直方图从 matplotlib 导入到 plotly【英文标题】:Importing histogram from matplotlib to plotly 【发布时间】:2015-01-24 06:29:33 【问题描述】:

我用下面的python代码生成了这些直方图,在maptlotlib中看起来很好:

d_norm_1 = np.random.normal(loc=0.0, scale=3.0, size=5000)

## Build a Gaussian Mixture Model:
array1 = np.random.normal(loc=4.0, scale=2.0, size=2000)
array2 = np.random.normal(loc=-5.0, scale=4.0, size=2000)
d_norm_2 = np.concatenate((array1, array2))

fig3 = plt.figure(3, figsize=(8, 6))
ax3 = fig3.add_subplot(1, 1, 1)

plt.hist(d_norm_1, bins=40, normed=True, color='b', alpha=0.4, rwidth=1.0)
plt.hist(d_norm_2, bins=40, normed=True, color='g', alpha=0.4, rwidth=0.8)

plt.xlabel('$x$', size=20)
plt.ylabel('Probability Density', size=20)
plt.title('Histogram', size=20)

plt.setp(ax3.get_xticklabels(), rotation='horizontal', fontsize=16)
plt.setp(ax3.get_yticklabels(), rotation='horizontal', fontsize=16)

plt.show()

但是当我将它导入 plotly 时,直方图条被线条替换。我认为 plotly 与这个版本的 matplotlib 不兼容。

这是上面显示的同一直方图的绘图版本:

https://plot.ly/~vmirjalily/11/histogram/

我正在使用 matplotlib 1.4.2

【问题讨论】:

我很确定正确地将其识别为条形图-我能够进入“跟踪”对话框并减少条形间隙以使条形显示得更好一些。我认为这个问题主要与 plotly 的导入 API 有关,这可能使它更像是一个你应该发送给 plotly 支持的问题,而不是适合 SO 的东西。 【参考方案1】:

您要绘制的代码直方图正在工作。

您只是缺少最后一步。您的情节显示的是分组条形图。基本上,plotly 所做的就是在一列中显示 2 个条形图。

你需要做的,就是去

traces > 模式并更改为“叠加”条形图

这是我的实现

https://plot.ly/1/~quekxc

【讨论】:

它通过将模式更改为“overley”来工作!谢谢 @VahidMir 感谢您的更正!顺便说一句,情节不错【参考方案2】:

如果您想使用网络工具,biobirdman 的解决方案非常好。这是另一种严格从 Python 执行此操作的方法:

import matplotlib.pyplot as plt
import numpy as np

import plotly.plotly as py

d_norm_1 = np.random.normal(loc=0.0, scale=3.0, size=5000)

## Build a Gaussian Mixture Model:
array1 = np.random.normal(loc=4.0, scale=2.0, size=2000)
array2 = np.random.normal(loc=-5.0, scale=4.0, size=2000)
d_norm_2 = np.concatenate((array1, array2))

fig3 = plt.figure(3, figsize=(8, 6))
ax3 = fig3.add_subplot(1, 1, 1)

plt.hist(d_norm_1, bins=40, normed=True, color='b', alpha=0.4, rwidth=1.0)
plt.hist(d_norm_2, bins=40, normed=True, color='g', alpha=0.4, rwidth=0.8)

plt.xlabel('$x$', size=20)
plt.ylabel('Probability Density', size=20)
plt.title('Histogram', size=20)

plt.setp(ax3.get_xticklabels(), rotation='horizontal', fontsize=16)
plt.setp(ax3.get_yticklabels(), rotation='horizontal', fontsize=16)

# note the `update` argument, it's formatted as a plotly Figure object
# this says: "convert the figure as best you can, then apply the update on the result"
py.iplot_mpl(fig3, update='layout': 'barmode': 'overlay')

欲了解更多在线信息,请查看https://plot.ly/matplotlib/ 或https://plot.ly/python/

如需 Python 帮助,请查看 help(py.iplot_mpl)help(Figure)

有时也可以准确查看转换的内容,您可以试试这个:

import plotly.tools as tls
pfig = tls.mpl_to_plotly(fig3)  # turns the mpl object into a plotly Figure object
print pfig.to_string()  # prints out a `pretty` looking text representation

【讨论】:

以上是关于将直方图从 matplotlib 导入到 plotly的主要内容,如果未能解决你的问题,请参考以下文章

Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

从 matplotlib 导入地理图到 plotly

python使用matplotlib可视化堆叠的直方图(stacked histogram plot)多个类别的数据在直方图区间层面累积堆叠起来

python数据可视化(matplotlib,seaborn,plotly)

matplotlib:直方图的绘制

Matplotlib学习---用seaborn画矩阵图(pair plot)