如何在Matplotlib中更改刻度标签的文本方向?

时间:2018-12-27 09:10:52

标签: python matplotlib

我必须使用Matplotlib库在XAxis上可视化带有中文刻度标签的某些数据。这是一个示例:

A plot with Chinese tick labels

我想更改刻度标签的文本方向以得到如下图:

enter image description here

请注意,它不是“文本轮换”。这是关于文字方向的。

如何在Matplotlib中实现这一目标?

P.S。 上面的图是在Excel中创建的,用于演示。这是Matplotlib的代码,它可以像第一个一样生成图。好吧,我无法在Matplotlib中制作第二个,这就是为什么我在这里...

import matplotlib.pyplot as plt
import matplotlib.font_manager as mfont
myfont = mfont.FontProperties('SimHei')

data = [1,2,3,4,5]
labels = ['中文1', '中文2', '中文3', '中文4', '中文5']

fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(data, data, tick_label=labels)

for label in ax.xaxis.get_majorticklabels():
    label.set(fontproperties=myfont)
plt.show()

我在标签文本中插入了新行,并且得到了如下图: enter image description here

文字被遮挡了。

以上情节的代码:

import matplotlib.pyplot as plt
import matplotlib.font_manager as mfont
# myfont = mfont.FontProperties('SimHei', size=30)

data = [1,2,3,4,5]
labels = ['中\n文\n1', '中\n文\n2 ', '中\n文\n3', '中\n文\n4', '中\n文\n5']

fig = plt.figure()
fig.set_facecolor('white')
ax = fig.add_subplot(111)
ax.bar(data, data, tick_label=labels)

for label in ax.xaxis.get_majorticklabels():
    label.set(family='SimHei', size=15, backgroundcolor='red', linespacing=3)
plt.show()

3 个答案:

答案 0 :(得分:2)

我认为没有任何方法可以在matplotlib中垂直打印文本。但是,您可以通过在要打印的文本中插入换行符来进行简单的修改。

import matplotlib.pyplot as plt
import matplotlib.font_manager as mfont
myfont = mfont.FontProperties('SimHei')

data = [1,2,3,4,5]
labels = ['中\n文\n1', '中\n文\n2', '中\n文\n3', '中\n文\n4', '中\n文\n5']

fig = plt.figure()
ax = fig.add_subplot(111)
ax.bar(data, data, tick_label=labels)

for label in ax.xaxis.get_majorticklabels():
    label.set(fontproperties=myfont)
plt.show()

答案 1 :(得分:1)

一种解决方法,可在打印刻度时使每个单词换行。

labels = ['\n'.join(list(tick)) for tick in labels ]

答案 2 :(得分:0)

访问:

https://matplotlib.org/gallery/ticks_and_spines/ticklabels_rotation.html

示例:

$stmt = $dbdto->prepare("CALL testSO(?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param('iiiiissi', $val1, $val2, $val3, $val4, $val5, $val6, $vl7, $val8);
$stmt->execute();
$result = $stmt->get_result();

$data = array();
while ( $row = $result->fetch_assoc() ) {
    $data[] = $row;
}

$newdata = array();
$arr = ["i_value_p", "i_value_n", "i_value_u"];

foreach ($arr as $item) {
    $row_array = array();
    $row_array["name"] = $item;
    $row_array["data"] = array();
    //loop fruits
    foreach ($data as $d) {

    }
    array_push($newdata, $row_array);
}

您可以按刻度或关键字指定刻度标签的旋转角度。

import matplotlib.pyplot as plt

x = [1, 2, 3, 4]
y = [1, 4, 9, 6]
labels = ['Frogs', 'Hogs', 'Bogs', 'Slogs']

plt.plot(x, y, 'ro')

填充边距,以便标记不会被轴剪切

plt.xticks(x, labels, rotation='vertical')

调整间距以防止刻度标签被剪裁

plt.margins(0.2)