【问题标题】:Plotly chart percentage with smileys用笑脸绘制图表百分比
【发布时间】:2021-04-14 15:32:01
【问题描述】:

我想添加一个基于笑脸的情节图,如下所示: dat 将来自数据框 pandas:dataframe.value_counts(normalize=True)

谁能给我一些线索。

【问题讨论】:

  • 你能详细描述一下这个图吗?我不明白你在做什么。
  • 我会用百分比来做到这一点:我会有很好、很好、中等,.. 对于百分比我会有笑脸。如果非常好是 10% 多于 10 个笑脸(100% 的表格将是 10x10)。是不是更清楚了?
  • 所以这就像显示成绩之类的方式?就像一个项目有 4 个类别,每个类别价值 25%,那么获得非常好的一个类别会得到 25 个非常开心的笑脸,他们在 2 个类别上做得很好会得到 50 个笑脸,而在最后一个类别做得不好会得到 25 个悲伤的脸?那么映射是一个数字加权元组到一个 10x10 矩阵?

标签: pandas plotly-dash


【解决方案1】:
  • 以正常方式使用 colorscale 制作热图
  • 使用 annotation_text 将表情符号分配给值
import plotly.figure_factory as ff
import plotly.graph_objects as go
import pandas as pd
import numpy as np


df = pd.DataFrame([[j*10+i for i in range(10)] for j in range(10)])

e=["?","?","?","☹️"]

fig = go.Figure(ff.create_annotated_heatmap(
    z=df.values, colorscale="rdylgn", reversescale=False,
    annotation_text=np.select([df.values>75, df.values>50, df.values>25, df.values>=0], e),
))


fig.update_annotations(font_size=25)
# allows emoji to use background color
fig.update_annotations(opacity=0.7) 

更新彩色表情符号

  • 从根本上说,您需要能够接受颜色样式的表情符号
  • 为此,我切换到 Font Awesome。这还需要切换到 dashplotly 的表亲,以便可以使用外部 CSS(使用 FA)
  • 然后构建一个 dash HTML 表格,应用样式逻辑来选择表情和颜色
from jupyter_dash import JupyterDash
import dash_html_components as html
import pandas as pd
import branca.colormap

# Load Data
df = pd.DataFrame([[j*10+i for i in range(10)] for j in range(10)])

external_stylesheets = [{
    'href': 'https://use.fontawesome.com/releases/v5.8.1/css/all.css',
    'rel': 'stylesheet', 'crossorigin': 'anonymous',
    'integrity': 'sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf',
    }]

# possibly could use a a different library for this - simple way to map a value to a colormap
cm = branca.colormap.LinearColormap(["red","yellow","green"], vmin=0, vmax=100, caption=None)

def mysmiley(v):
    sm = ["far fa-grin", "far fa-smile", "far fa-meh", "far fa-frown"]
    return html.Span(className=sm[3-(v//25)], style={"color":cm(v),"font-size": "2em"})

# Build App
app = JupyterDash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
    html.Table([html.Tr([html.Td(mysmiley(c)) for c in r]) for r in df.values])
])

# Run app and display result inline in the notebook
app.run_server(mode='inline')

【讨论】:

  • 如何让这个没有背景色?
  • 已更新 - 实际上意味着您必须使用 dash 迁移到样式化 HTML
猜你喜欢
  • 2012-06-16
  • 1970-01-01
  • 2015-05-10
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多