2016-09-05 23 views
1

我有一个带色条的matplotlib阴谋,似乎无法弄清楚如何匹配阴谋和颜色条的字体。Matplotlib,usetex:色条的字体与阴谋的字体不匹配

我尝试使用usetex进行文本处理,但似乎只有情节的滴答声受到影响,而不是颜色条的滴答声。 另外,我已经搜索了相当多的解决方案,所以在下面的代码示例中,包含了一些不同的尝试,但结果仍然是粗体字体。最小失败代码示例:

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import sys 
import colorsys 
import numpy as np 


mpl.rc('text', usetex=True) 
plt.rcParams["font.family"] = "Times New Roman" 
plt.rcParams["font.weight"] = 100 
plt.rcParams["axes.labelweight"] = 100 
plt.rcParams["figure.titleweight"] = 100 


def draw(): 
    colors = [colorsys.hsv_to_rgb(0.33, step /15, 1) for step in [2, 5, 8, 11, 14]] 
    mymap = mpl.colors.LinearSegmentedColormap.from_list('value',colors, N=5) 

    Z = [[0,0],[0,0]] 
    levels = range(2,15+4,3) 
    CS3 = plt.contourf(Z, levels, cmap=mymap) 
    plt.clf() 

    plt.figure(figsize=(20, 15)) 
    plt.gca().set_aspect('equal') 

    cbar = plt.colorbar(CS3, ax=plt.gca(), shrink=0.5, fraction=0.5, aspect=30, pad=0.05, orientation="horizontal") 

    cbar.set_ticks([1.5 + x for x in [2,5,8,11,14]]) 

    # attempts to make the fonts look the same 
    cbar.ax.set_xticklabels([1,2,3,4,5], weight="light", fontsize=16) 
    cbar.set_label("value", weight="ultralight", fontsize=32) 
    plt.setp(cbar.ax.xaxis.get_ticklabels(), weight='ultralight', fontsize=16) 

    for l in cbar.ax.xaxis.get_ticklabels(): 
     l.set_weight("light") 

    plt.show() 

draw() 

不幸的是,字体看起来并不一样。图片:

plot font and colorbar font are different

我敢肯定,这对我而言usetex的只是个愚蠢的误解。为什么usetex似乎不处理colormap的字体?

谢谢!

+0

复制此代码时出现错误。也许必须使用OSX和python3来处理我。 – Skirrebattie

+0

使用OS X + Python 3的例子很好用 – Bart

+0

@Skirrebattie我实际上也使用OS X + python 3。你会得到什么错误? – Tonkel

回答

1

这里的问题是,当时,MPL在$中包装了标签标签。这会导致它们具有与未包含在$中的文本不同的大小。当您强制标记为[1,2,3,4,5]的刻度时,这些值不会包含在$中,因此呈现方式不同。我不知道的具体细节为什么这是,但我已经在自己面前遇到了问题。

我建议你包裹在彩条蜱$,例如:

cbar.ax.set_xticklabels(['${}$'.format(tkval) for tkval in [1, 2, 3, 4, 5]]) 

从那里,你应该能够找出如何调整字体大小/权重,因此它们匹配,你会得到你想。

+0

就是这样!谢谢farenorth! – Tonkel