Как установить метки для отметок по оси X, используя matplotlib в python? - PullRequest
0 голосов
/ 27 января 2019

Я хочу, чтобы только x-метки отображались для столбцов на гистограмме с использованием matplotlib в python, то есть 1992, 1993, 1994, 1995 вместо 1990, 1990.5, 1991, 1991.5 и т. Д. На оси х, что и делает. по умолчанию

Я пытался использовать код, предложенный здесь: Управление метками тика оси x в matplotlib который предлагает использовать это: ind = range(2,6); plt.xticks(ind,x)

import pandas as pd
import numpy as np

np.random.seed(12346)

df = pd.DataFrame([np.random.normal(32000,200000,3650), 
                   np.random.normal(43000,100000,3650), 
                   np.random.normal(43500,140000,3650), 
                   np.random.normal(48000,70000,3650)], 
                  index=[1992,1993,1994,1995])
Y = 40000

import math

%matplotlib notebook

plt.figure()

std = df.std(axis = 1)
stderror = std/math.sqrt(df.shape[1])
marginoferror = stderror*1.96
print(df.mean(axis=1).iloc[0] - marginoferror.iloc[0])

def color_def(y,dataframe,mofe):
    color = []
    for i in range(0,dataframe.shape[0]):
        if (dataframe.mean(axis=1).iloc[i] - mofe.iloc[i] > y):
            color.append('darkred')
        elif (dataframe.mean(axis=1).iloc[i] + mofe.iloc[i] < y):
            color.append('darkblue')
        else:
            color.append('white')
    return(color)
x = df.index.values
plt.bar(df.index.values,df.mean(axis=1),yerr=marginoferror,align='center', color = color_def(Y,df,marginoferror),alpha=0.5, edgecolor = 'black',ecolor='black', capsize=10)

plt.axhline(y=Y)

ind = range(2, 6)    # the x locations for the groups
plt.xticks( ind, x)

Когда я использую эти 2 строки кода ind = range(2,6); plt.xticks(ind,x), неожиданный результат можно увидеть по этой ссылке: https://www.dropbox.com/s/0ciuix13nhdj5jz/HW3%20v0.1.jpg?dl=0

, которая не является хорошо отформатированной гистограммой и не имеет оси X, помеченной как 1992, 1993, 1994 и 1995 годы.

Когда я беру эти 2 строки кода: ind = range(2,6); plt.xticks(ind,x), Я получаю хорошо отформатированную гистограмму только с неуклюжей надписью оси X

1 Ответ

0 голосов
/ 27 января 2019

Не уверен, как числа от 2 до 5 будут относиться к вашим данным. Ваши данные - это 1992 ... 1995, который является индексом кадра данных, следовательно,

plt.xticks(df.index.values)

отметит именно эти значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...