繁体   English   中英

Matplotlib用与系列相对应的颜色创建文本

Matplotlib create text with colors corresponding to series

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试为不同系列创建一个具有不同颜色的情节。 当我尝试将图中的数据添加为文本框时,出现了问题。

我使用的代码如下:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import scipy.stats as stats

df = pd.DataFrame({'x': [21000, 16900, 18200, 32000, 35000, 7500], 'y':[3000, 2100, 1500, 3000, 2500, 2000], 'z':['a', 'b', 'c', 'd', 'e', 'f']})

fig, ax = plt.subplots(figsize=(8,6))

text_list = []
color_list = []

for i, row in df.iterrows():
    mu, sigma, group = row['x'], row['y'], row['z']       
    x = np.linspace(mu - 4*sigma, mu + 4*sigma, 100)

    sns.lineplot(x, stats.norm.pdf(x, mu, sigma), ax=ax)
    color = ax.get_lines()[-1].get_c()

    ax = plt.gca()
    ax.text(mu*1.05, max(stats.norm.pdf(x, mu, sigma)), group, fontsize=16, color=color) #only retrieve RGB so blank text is not too light      

    text = r'{0}: {1} $\pm$ {2}'.format(group, mu, sigma)
    text_list.append(text)
    color_list.append(color)

plt.gcf().text(0.68, 0.6, '\n'.join(text_list), bbox=dict(facecolor='white', edgecolor='black', pad=10.0, alpha=1), fontsize=14)
fig.show()

产生下图: 在此处输入图片说明

bbox中的文本均为黑色。 理想情况下,文本框中的每条线应具有与图中相应系列相同的颜色。

我能够在text_box_content和color_list中保存两个文本和颜色列表。 我还尝试在具有动态更新的文本位置的for循环中添加plt.gcf().text() ,但是为每行创建了边框,而不是为所有文本创建了整体边框。

如果在概念上有类似的东西会更好

plt.gcf().text(zip(text_list, color_list))所以每行可以有自己的颜色吗?

1 个回复

您可以创建图例,并通过其所属行的颜色为每个图例项上色。 如果您不想在图例中显示该行本身,则可以显示相应的字母作为图例句柄。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerBase
from matplotlib.text import Text
import seaborn as sns
import numpy as np
import scipy.stats as stats

class TextHandler(HandlerBase):
    def create_artists(self, legend,tup ,xdescent, ydescent,
                        width, height, fontsize,trans):
        tx = Text(width/2.,height/2,tup[0], fontsize=fontsize,
                  ha="center", va="center", color=tup[1], fontweight="bold")
        return [tx]

df = pd.DataFrame({'x': [21000, 16900, 18200, 32000, 35000, 7500], 
                   'y':[3000, 2100, 1500, 3000, 2500, 2000], 
                   'z':['a', 'b', 'c', 'd', 'e', 'f']})

fig, ax = plt.subplots(figsize=(8,6))

handles = []
labels = []

for i, row in df.iterrows():
    mu, sigma, group = row['x'], row['y'], row['z']       
    x = np.linspace(mu - 4*sigma, mu + 4*sigma, 100)

    sns.lineplot(x, stats.norm.pdf(x, mu, sigma), ax=ax)
    color = ax.get_lines()[-1].get_c()

    ax.text(mu*1.05, max(stats.norm.pdf(x, mu, sigma)), group, fontsize=16, color=color)

    handles.append(("{}:".format(group), color))
    labels.append("{} $\pm$ {}".format(mu, sigma))

leg = ax.legend(handles=handles, labels=labels, handler_map={tuple : TextHandler()},
          facecolor='white', edgecolor='black', borderpad=0.9, framealpha=1, 
          fontsize=10, handlelength=0.5)

for h, t in zip(leg.legendHandles, leg.get_texts()):
    t.set_color(h.get_color())

plt.show()

在此处输入图片说明

这是受到我对这个问题的回答的启发并部分使用了代码,在您不想使用图例的情况下,它也提供了另一种选择。

2 SVG 文本颜色与背景相对应

我正在使用 D3.js 制作像这张图片上的图表: 一般来说,一切正常,但我不知道当条形没有覆盖所有标签时如何使标签可见。 我的第一个想法是添加两个标签。 一种为白色,另一种为条形颜色。 我希望能发生一些魔法,栏外的文字会是绿色的,但这是行不通的。 这是我用来添加标签的一段代码: 如何达到 ...

3 使用与每个“颜色”和值对应的标签创建一个带标签的系列?

我有一个示例数据框 (df),如下所示,我想使用 Pandas 创建一个带有与每种颜色相对应的标签的系列,以及该颜色条目出现在数据框中的次数,种类就像每种颜色的总数。 我尝试了以下方法,但得到了一个系列,其中总行数显示为每种颜色的颜色总和: 电流输出: 但是,很明显,数据框中的 4 种颜色中 ...

5 如何在Java Swing TextArea中更改突出显示颜色? 并且,更改与突出显示位置相对应的文本的开头

问题1:通过使用defaulthighlighter,我可以使聚焦线变为蓝色。 现在,我想将其更改为其他颜色。 有人知道如何更改此参数吗? - - 解决了 问题2:pos是我要突出显示的子字符串的开始索引。 我使用setCaretPosition(pos); 更新显示内容。 ...

7 如何在scipy创建的树形图中获得与颜色簇相对应的平面聚类

使用这里发布的代码,我创建了一个很好的层次聚类: 让我们说左边的树状图是通过做类似的东西来创建的 现在我如何获得每个彩色簇的成员的索引? 要简化这种情况,请忽略顶部的聚类,并仅关注矩阵左侧的树形图。 该信息应存储在树形图Z存储变量中。 有一个函数应该做我想要的fclus ...

9 Matplotlib动画:绘制与增量相对应的变化数字

我创建了地震动画,绘制了随着时间推移地震震中位置的图表。 我希望在左下角或右下角添加一个数字计数器,该计数器随每个震中图变化。 因此,每次在图中绘制地震,次数都会增加。 我将如何编辑我的脚本(如下所示),以允许在绘图中使用此注释? 谢谢。 ...

10 matplotlib,边上的点与图中的点相对应的图

[1]: http : //i50.tinypic.com/xng4jr.png “这是一个示例,我想知道在matplotlib中使用wxpython是否可行 基本上,图的侧面周围有彩色的部分,它们与图上的点相对应,当您单击蓝色或红色的部分时,它会突出显示图上与之相关的点 如果可以这 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM