Как отобразить отрицательные значения x слева для гистограммы? - PullRequest
0 голосов
/ 29 мая 2020

Я хотел бы задать вопрос относительно barplot for seaborn.

У меня есть набор данных, возвращенный из bigquery и преобразованный в dataframe, как показано ниже.

Sample data from `df.sort_values(by=['dep_delay_in_minutes']).to_csv(csv_file)`

,dep_delay_in_minutes,arrival_delay_in_minutes,numflights
1,-50.0,-38.0,2
2,-49.0,-59.5,4
3,-46.0,-28.5,4
4,-45.0,-44.0,4
5,-43.0,-53.0,4
6,-42.0,-35.0,6
7,-40.0,-26.0,4
8,-39.0,-33.5,4
9,-38.0,-21.5,4
10,-37.0,-37.666666666666664,12
11,-36.0,-35.0,2
12,-35.0,-32.57142857142857,14
13,-34.0,-30.0,18
14,-33.0,-26.200000000000003,10
15,-32.0,-34.8,10
16,-31.0,-28.769230769230766,26
17,-30.0,-34.93749999999999,32
18,-29.0,-31.375000000000004,48
19,-28.0,-24.857142857142854,70
20,-27.0,-28.837209302325583,86

Я написал код, как показано ниже, но отрицательное значение нанесено на справа .

import matplotlib.pyplot as plt
import seaborn as sb
import pandas as pd
import numpy as np
import google.datalab.bigquery as bq
import warnings

# Disable warnings
warnings.filterwarnings('ignore')
sql="""
SELECT
  DEP_DELAY as dep_delay_in_minutes,
  AVG(ARR_DELAY) AS arrival_delay_in_minutes,
  COUNT(ARR_DELAY) AS numflights
FROM flights.simevents
GROUP BY DEP_DELAY
ORDER BY DEP_DELAY
"""

df = bq.Query(sql).execute().result().to_dataframe()
df = df.sort_values(['dep_delay_in_minutes'])

ax = sb.barplot(data=df, x='dep_delay_in_minutes', y='numflights', order=df['dep_delay_in_minutes'])
ax.set_xlim(-50, 0)

введите описание изображения здесь

Как я могу отобразить ось x как numeri c order с отрицательными значениями слева?

Буду признателен, если бы я мог получить немного adice.

1 Ответ

0 голосов
/ 31 мая 2020

Не работает указание слева и справа с помощью ax.set_xlim(). Он хорошо отображался только с одной спецификацией.

import matplotlib.pyplot as plt
import seaborn as sb
import pandas as pd
import numpy as np

df = df.sort_values(['dep_delay_in_minutes'])

ax = sb.barplot(x='dep_delay_in_minutes', y='numflights', data=df, order=df['dep_delay_in_minutes'])
ax.set_xlim(0.0)
labels = ax.get_xticklabels()
plt.setp(labels, rotation=45)

plt.show()

Возможны и другие обозначения.

ax.set_xlim(0.0,)

enter image description here

...