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

Par*_*val 3 python matplotlib

假设我有以下3x3矩阵:

[苹果19 3.5]

[橘子07 2.2]

[葡萄23 7.8]

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

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

我还希望每个单词的字体大小由第二列确定(在上面的例子中,这意味着使"葡萄"的大小约为"橙子"的三倍).

最后,我想对与第三列对应的红色到蓝色刻度的颜色进行着色,0 =最暗的红色,10 =最暗的蓝色.

在Python 2.x中最好的方法是什么?我知道我可以使用matplotlib的"annotate"和"text"来做很多(如果不是全部)这些事情,但不知怎的,这感觉就像一个解决方法.当然必须有一种方法来宣称单词是标记(所以我不必将它们视为"注释")?也许在matplotlib之外的东西?有没有人在那里做过类似的事情?

Gre*_*reg 11

因为你不想使用annotatetext下一个最好的东西是py.scatter接受标记

``'$...$'``                    render the string using mathtext.
Run Code Online (Sandbox Code Playgroud)

例如

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()
Run Code Online (Sandbox Code Playgroud)

例

这种方法有几个问题

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

使用色彩图而不是简单地定义RGB色值可能会更好.