如何在 matplotlib 条形图上旋转 x 轴刻度标签?尝试了几种方法,都没有奏效
Posted
技术标签:
【中文标题】如何在 matplotlib 条形图上旋转 x 轴刻度标签?尝试了几种方法,都没有奏效【英文标题】:How to rotate x-axis tick labels on matplotlib bar chart? Tried several approaches, none worked 【发布时间】:2019-12-14 10:55:46 【问题描述】:我无法旋转 matplotlib 条形图上的 x 刻度标签,因此这些标签当前重叠。我已经阅读了一些 matplotlib 文档以及其他阅读,并尝试了不同的方法,但都没有奏效。根据我对所读内容的理解,似乎有不止一种方法可以使用 matplotlib 实现条形图,而且我不能在所有条形图上旋转刻度标签,只能在以某种方式制作的条形图上旋转。那准确吗?有没有办法在我的条形图上进行 x 轴刻度标签旋转?
(快速概述我正在尝试做的事情:我正在制作一个包含条形图的 Web 应用程序。我正在处理的条形图应该在 x- 上显示癌症药物副作用的名称轴,以及 y 轴上每种副作用的发生百分比。副作用标签很长,因此它们重叠,这就是我尝试旋转它们的原因。)
这里是python代码:
import os
import matplotlib.pyplot as plt
import numpy as np
import mpld3
from matplotlib import *
from cs50 import SQL
from flask import Flask, flash, jsonify, redirect, render_template,
request, session
from flask_session import Session
from tempfile import mkdtemp
from werkzeug.exceptions import default_exceptions, HTTPException,
InternalServerError
import sqlite3
app = Flask(__name__)
app.config["TEMPLATES_AUTO_RELOAD"] = True
app.config["SESSION_FILE_DIR"] = mkdtemp()
app.config["SESSION_PERMANENT"] = False
app.config["SESSION_TYPE"] = "filesystem"
Session(app)
db = SQL("sqlite:///cancermeds.db")
@app.route("/", methods=["GET", "POST"])
def index():
if request.method=="POST":
selection = request.form.get("cancerlist")
if selection == "breast cancer":
rows = db.execute("SELECT * FROM 'breast cancer'")
for row in rows:
keys = list(row.keys())
del keys[16:19]
print(keys)
values = list(row.values())
del values[16:19]
print(values)
positions =
[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
fig, ax = plt.subplots()
fig = plt.figure(figsize=(7,6))
ax = plt.bar(keys, values, width=0.5)
plt.xlabel("Side Effects")
plt.xticks(positions, keys)
plt.xticks(rotation=60)
plt.ylabel("Percentages of Occurence of Side
Effects")
plt.title("Bar Chart showing Side Effects of Breast
Cancer Medication(s) With Their Corrresponding Percentages Of
Occurence")
fig = ax[0].figure
bar_chart = mpld3.fig_to_html(fig)
return render_template("breastcancer.html", bar_chart = bar_chart)
else:
return render_template("index.html")
if __name__ == '__main__':
app.run(debug=True)
plt.xticks(rotation=60) 线用于将 x 轴刻度标签旋转 60 度(我只是选择了 60 度,这个确切数字没有具体原因)。然而,标签根本不旋转,但奇怪的是名为“副作用”的 x 轴标签消失了。当我删除 plt.xticks(rotation=60) 行时,“副作用”标签会重新出现在它的位置。
感谢您的帮助。
【问题讨论】:
您需要创建一个minimal reproducible example,以便人们可以运行您的代码。此外,您还需要说明您关心的输出是来自 matplotlib 还是来自 mpld3。 【参考方案1】:您有几个选择。您可以在设置 xticklabels 或使用 tick_params 时执行此操作。
fig = pl.figure(figsize=(5, 5))
ax0 = fig.add_subplot(111)
ax0.bar(x, height=2)
ax0.set_xticklabels(yourLabels, rotation=60)
# alternatively
ax0.tick_params(rotation=60)
当然,你必须指定你的刻度标签应该是什么。
顺便说一句,我不会像你那样制作我的数字(如你在示例中看到的那样),这可能会或可能不会影响你如何改变你的数字。
【讨论】:
我会尝试使用您的答案,看看情况如何。谢谢! 我无法成功地将这种制作数字的方法合并到我的代码中。我只是不明白。您是否推荐任何可以帮助指导我从制作图形到将图形转换为 html 的阶段,以便能够在网页上显示条形图的特定阅读材料?谢谢。 @JohnAbdelmalek 我想我没有看到这个问题。也许如果您回答 ImportanceOfBeingErnest 的问题并提供 MWE,您可以获得更多帮助。以上是关于如何在 matplotlib 条形图上旋转 x 轴刻度标签?尝试了几种方法,都没有奏效的主要内容,如果未能解决你的问题,请参考以下文章