在matplotlib中使用单词作为标记的“干净”方法?并使字体大小和颜色不同?


问题内容

假设我有下面的3x3矩阵:

[苹果19 3.5]

[橙色07 2.2]

[葡萄23 7.8]

仅在现实生活中,矩阵才有几十行,而不仅仅是三行。

我想创建一个XY图,其中第二列是X坐标,第三列是Y坐标,单词本身(即第一列)是标记(因此没有点,线或任何其他符号) 。

我还希望每个单词的字体大小由第二列确定(例如,在上面的示例中,这意味着使“葡萄”的大小大约是“橙色”的三倍)。

最后,我想按与第三列相对应的红色至蓝色比例为单词上色,0 =最暗的红色和10 =最暗的蓝色。

在Python
2.x中解决该问题的最佳方法是什么?我知道我可以使用matplotlib的“注释”和“文本”来完成许多(如果不是全部)这些事情,但是在某种程度上,这似乎是一种解决方法。当然,必须有一种方法将这些单词声明为标记(因此我不必将它们视为“注释”)?也许在matplotlib之外?有没有人做过类似的事情?


问题答案:

由于您不想使用,annotatetext下一个最好的方法是py.scatter接受标记

``'$...$'``                    render the string using mathtext.

例如

import pylab as py

data = [["peach", 1.0, 1.0], 
        ["apples", 19, 3.5], 
        ["oranges", 7, 2.2], 
        ["grapes", 23, 7.8]]

for item in data:
    py.scatter(item[1], item[2], s=700*item[1], 
           c=(item[2]/10.0, 0, 1 - item[2]/10.0), 
           marker=r"$ {} $".format(item[0]), edgecolors='none' )

py.show()

例

此方法有几个问题

  • \textrm{}在数学文本中使用使其不斜体似乎会破坏matplotlib
  • 字母大小需要手动调整(因此系数为700)

使用颜色表而不是简单地定义RGB颜色值可能会更好。