将直方图从 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)
python使用matplotlib可视化堆叠的直方图(stacked histogram plot)多个类别的数据在直方图区间层面累积堆叠起来