在matplotlib中使用单词作为标记的“干净”方法?并使字体大小和颜色不同?
问题内容:
假设我有下面的3x3矩阵:
[苹果19 3.5]
[橙色07 2.2]
[葡萄23 7.8]
仅在现实生活中,矩阵才有几十行,而不仅仅是三行。
我想创建一个XY图,其中第二列是X坐标,第三列是Y坐标,单词本身(即第一列)是标记(因此没有点,线或任何其他符号) 。
我还希望每个单词的字体大小由第二列确定(例如,在上面的示例中,这意味着使“葡萄”的大小大约是“橙色”的三倍)。
最后,我想按与第三列相对应的红色至蓝色比例为单词上色,0 =最暗的红色和10 =最暗的蓝色。
在Python
2.x中解决该问题的最佳方法是什么?我知道我可以使用matplotlib的“注释”和“文本”来完成许多(如果不是全部)这些事情,但是在某种程度上,这似乎是一种解决方法。当然,必须有一种方法将这些单词声明为标记(因此我不必将它们视为“注释”)?也许在matplotlib之外?有没有人做过类似的事情?
问题答案:
由于您不想使用,annotate
或text
下一个最好的方法是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颜色值可能会更好。