Гистограмма и график с одинаковым топором [дубликат]

<html>
    <head>
        <title>HTML Document</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
    </head>

    <body>
        <div id="hover-id">
            Hello World
        </div>

        <script>
            jQuery(document).ready(function($){
                $(document).on('mouseover', '#hover-id', function(){
                    $(this).css('color','yellowgreen');
                });

                $(document).on('mouseout', '#hover-id', function(){
                    $(this).css('color','black');
                });
            });
        </script>
    </body>
</html>
3
задан acb 15 March 2017 в 16:20
поделиться

2 ответа

К сожалению, представляется невозможным построить график штрихов и линейный график для тех же осей в пандах, если ось х является осью даты.

Обходным путем является использование барплота matplotlib вместо

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv", index_col="DateTime", parse_dates=True, delim_whitespace=True)

fig, ax= plt.subplots()

ax.plot_date(df.index, df.iloc[:,11], '-')
for i in range(10):
    diff = df.index[1]-df.index[0]
    spacing = diff/(1.3*len(df.columns))
    ax.bar(df.index+(-5+i)*spacing, df.iloc[:,i], 
           width=spacing/diff, label=df.columns[i]) 
plt.legend()
plt.gcf().autofmt_xdate()
plt.show()

Изменить:

Можно будет построить график штрихов и график линии в тех же осях, если пренебречь факт, что точки - это даты. В следующем коде следует, что мы не читаем первый столбец как индекс.

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv", parse_dates=True, delim_whitespace=True)

ax = df.iloc[:,[0,1,2,3,4,5,6,7,8,9,10,11]].plot(kind='bar')
df.iloc[:,12].plot(linestyle='-', marker='o', ax = ax)

ax.set_xticklabels(df.DateTime, rotation=40) 
plt.show()

Таким образом, этот метод создаст график, в котором бары и линейные точки просто упорядочиваются по их индексу (который не является датой). Это может быть приемлемо или не зависит от того, совпадают ли даты с интервалом.

Если мы, например, измените входной файл, чтобы пропустить дату (11/6/2014 нет), код будет генерировать

, где бары и точки линии все еще находятся на равном расстоянии, хотя даты в действительности не являются.

Построение одних и тех же данных за один день, пропущенных с кодом matplotlib с начала ответа, мы получаем

, где действительно отсутствует 11/6/2014.

2
ответ дан ImportanceOfBeingErnest 19 August 2018 в 04:09
поделиться
  • 1
    это сработало, но вы можете мне объяснить, что такое «(10. + 3)» делает? Спасибо. – acb 15 March 2017 в 18:37
  • 2
    Я отредактировал код, чтобы было более очевидно, что (10 + 3) должно означать замену его на (1.3 * n), где n - количество столбцов для построения. Я также узнал, почему работает код из @ A-Za-z, и добавил объяснение в мой ответ. – ImportanceOfBeingErnest 16 March 2017 в 08:34

Вам просто нужно построить их на одной оси

ax = df.iloc[:,[0,1,2,3,4,5,6,7,8,9,10]].plot(kind='bar')
df.iloc[:,12].plot(linestyle='-', marker='o', ax = ax)

ax.set_xticklabels(df.DateTime, rotation=40) #set the x-ticks to datetime column and rotate

- это код, который я использовал для построения графиков на одном графике

0
ответ дан Vaishali 19 August 2018 в 04:09
поделиться
  • 1
    хм, это только дает мне график столбца 11. – acb 15 March 2017 в 16:44
  • 2
    Я попробовал сюжет, прежде чем отвечать, он дает как планку, так и линию – Vaishali 15 March 2017 в 17:17
  • 3
    @ A-Z Вы использовали DataFrame в вопросе? – ImportanceOfBeingErnest 15 March 2017 в 17:24
  • 4
    Да, с одним и тем же фреймом. Я отправлю изображение сюжета – Vaishali 15 March 2017 в 17:31
  • 5
    Я все еще получаю только один сюжет. Можете ли вы опубликовать код, который вы использовали? – acb 15 March 2017 в 18:32
Другие вопросы по тегам:

Похожие вопросы: