【问题标题】:Colorbar on Pandas DataFramePandas DataFrame 上的颜色条
【发布时间】:2019-09-01 05:09:23
【问题描述】:

我有一些数据框:

fake_data = {'columnA': ['XYVA', 'YXYX', 'XAVY', 'XAVY', 'XAAY', 'AXAV', 'AXYV', 'AXXV', 'AXXV', 'AXXV', 'AXXV']}
df = pd.DataFrame(fake_data, columns = ['columnA'])
df

我可以根据每个字符在每个位置的频率为单元格着色 (Count the frequency of characters at a position in a string in a Pandas DataFrame column):

new_data = df.columnA.str.split('', n = 4, expand=True).drop(0, axis=1)
stats = new_data.apply(pd.Series.value_counts)
stats = stats.apply(lambda x: x.div(x.sum())*100).round(1).fillna(0)
stats.style.background_gradient(cmap='Greys', axis=None)

返回:

现在我正在尝试从单元格中删除数值(仅保留颜色)并用颜色条表示这些值。

【问题讨论】:

  • 我可以将数字着色为与背景相同的颜色,使它们看起来隐藏。至于颜色条,DataFrame.style 几乎不可能。看看annotated heatmaps(可能只是省略注释)。
  • plt.imshow() 对您来说可能更容易。

标签: python pandas matplotlib


【解决方案1】:

正如 ImportanceOfBeingErnest 评论的那样,您似乎正试图与 DataFrame 样式系统搏斗,以便为您提供热图。使用 Python 可用的众多绘图库之一创建实际的热图可视化可能会更好。

这是我最喜欢的示例 - Altair

import pandas as pd
import altair as alt

fake_data = {'columnA': ['XYVA', 'YXYX', 'XAVY', 'XAVY', 'XAAY', 'AXAV', 'AXYV', 'AXXV', 'AXXV', 'AXXV', 'AXXV']}
df = pd.DataFrame(fake_data, columns = ['columnA'])

new_data = df.columnA.str.split('', n = 4, expand=True).drop(0, axis=1)
stats = new_data.apply(pd.Series.value_counts)
stats = stats.apply(lambda x: x.div(x.sum())*100).round(1).fillna(0)

alt.Chart(
    stats.unstack().reset_index().rename(columns={"level_0": "position", "level_1":"character", 0: "count_fraction"}),
    height=150,
    width=150
).mark_rect(
).encode(
    x='position:O',
    y='character:O',
    color=alt.Color('count_fraction:Q', scale=alt.Scale(scheme='greys'))
)

【讨论】:

    猜你喜欢
    • 2020-04-17
    • 2017-11-13
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2013-09-24
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多