python - 从 pandas 数据透视表生成 Plotly 热图

标签 python pandas dictionary plotly heat

我已经搜索这个主题几个小时了,但仍然无法让我的代码工作。我正在尝试从我使用 Pandas 创建的数据透视表生成热图。我对编码还很陌生,可能没有使用正确的术语,但我会尽力而为。

我的表格是这样的:

enter image description here

它还有更多的行。我正在尝试生成一个 plotly 热图,其中 y 轴为国家/地区,x 为 4 种所有权类型,数值用作 z 值。我遇到了很多错误,但我想我已经接近了,因为它到了我的最后一行并说“TypeError:‘DataFrame’类型的对象不是 JSON 可序列化的。”我搜索了这个错误,但找不到任何我能理解的东西。我像这样设置表格,但在 z、x 和 y 输入方面遇到了问题:

data = [go.Heatmap(z=[Country_Ownership_df[['Company Owned', 'Franchise', 'Joint Venture', 'Licensed']]],
                   y=[Country_Ownership_df['Country']],
                   x=['Company Owned', 'Franchise', 'Joint Venture', 'Licensed'],
                   colorscale=[[0.0, 'white'], [0.000001, 'rgb(191, 0, 0)'], [.001, 'rgb(209, 95, 2)'], [.005, 'rgb(244, 131, 67)'], [.015, 'rgb(253,174,97)'], [.03, 'rgb(249, 214, 137)'], [.05, 'rgb(224,243,248)'], [0.1, 'rgb(116,173,209)'], [0.3, 'rgb(69,117,180)'], [1, 'rgb(49,54,149)']])]

layout = go.Layout(
    margin = dict(t=30,r=260,b=30,l=260),
    title='Ownership',
    xaxis = dict(ticks=''),
    yaxis = dict(ticks='', nticks=0 )
)
fig = go.Figure(data=data, layout=layout)
#iplot(fig)
plotly.offline.plot(fig, filename= 'tempfig3.html')

这可能是一项相当简单的任务,我只是没有学到太多编码知识,感谢您提供的任何帮助。

最佳答案

Plotly 将数据参数作为列表,并且不支持 Pandas DataFrames。要获得格式正确的 DataFrame,

  1. 数据作为值(Plotly 符号中的“z”),
  2. x 值作为列
  3. y 值作为索引

以下函数有效:

def df_to_plotly(df):
    return {'z': df.values.tolist(),
            'x': df.columns.tolist(),
            'y': df.index.tolist()}

因为它返回一个dict,你可以直接将它作为参数传递给go.HeatMap:

import plotly.graph_objects as go

fig = go.Figure(data=go.Heatmap(df_to_plotly(df)))
fig.show()

关于python - 从 pandas 数据透视表生成 Plotly 热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49827096/

相关文章:

python - 带有 isin 的 Pandas 函数

python - 在 O(n^2/2) 中迭代字典

python - 当 pyspark 中两列的值是相同组合时删除行

python - 如何通过将光标放在框架内来调整框架大小?

python - 使用python将数据包发送到tap接口(interface)

python - 在 pandas Dataframe 或 numpy 数组中查找值的先前实例的快速方法?

python - Xlsxwriter 以指定顺序订购工作表

c++ - 防止直接访问 std::map 键

python:字典键作为行索引,值作为列标题。如何使用字典引用并选择 df 中的特定值?

python - Django 1.6 Formset 的 bug : "referenced before assignment"