質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2439閲覧

matplotlibで時系列データの時間、分まで表示したい

SAMI1220

総合スコア-1

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

データ構造

データ構造とは、データの集まりをコンピュータの中で効果的に扱うために、一定の形式に系統立てて格納する形式を指します。(配列/連想配列/木構造など)

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/09/21 08:18

DataFrameをMatplotlibでグラフにしたいのですが、日付までしかx軸に反映されておらず、時間・分まで表示したい。合わせてx軸が重なり合っているので、重ならないような書き方があればご教示いただきたいです。

DataFrameの中身

イメージ説明

DATA型

1 リツイート数 192 non-null int64
2 ツイート日時 192 non-null datetime64[ns]

現状このようなコード

Python

1#現状のコード 2fig, ax = plt.subplots(figsize=(25, 12)) 3ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d\n%H:%M')) 4plt.bar(df['ツイート日時'], df['リツイート数'], width=0.15, label='Retweet')#いいね数 5plt.xticks(rotation=30) 6plt.xlabel('tweet_daytime') 7plt.ylabel('like_count') 8plt.legend() 9plt.show() 10

現在の状況

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/09/21 08:26

> 日付までしかx軸に反映されておらず、時間・分まで表示したい。 0時0分が表示されているように見えますが。 本当に表示したいのは、例えば3時間毎のラベル、とかそういうことですか?
SAMI1220

2021/09/21 08:44

わかりずらい表現で失礼しました。 グラフには0時0分まで表示されておりますが、DataFrameにあるような、時間、分がグラフに反映されていないので、反映させたいです。 以下で言う右の列を反映させたいと言うことです。 表示の仕方は毎時間でも3時間ごとでも大丈夫です 2021 -09-21 02:54:27 2021 -09-21 02:54:01 ... 2021 -09-12 07:37:38
meg_

2021/09/21 09:55

画像ですとコピーできないのでデータフレームをテキストで載せてもらえませんか?
SAMI1220

2021/09/21 10:17

ありがとうございます。 このような形でいかがでしょうか。 リツイート数 ツイート日時 0 3 2021-09-21 02:54:27 1 0 2021-09-21 02:54:01 2 0 2021-09-21 02:48:25 3 0 2021-09-21 02:39:32 4 0 2021-09-21 02:33:06 ... ... ... 187 56 2021-09-12 07:41:17 188 1 2021-09-12 07:37:56 189 6 2021-09-12 07:37:46 190 1 2021-09-12 07:37:41 191 1 2021-09-12 07:37:38 192 rows × 2 columns
meg_

2021/09/21 11:07 編集

質問のコードを試したところ「NameError: name 'mdates' is not defined」のエラーが発生しました。'mdates' は何でしょうか? ⇒ import matplotlib.dates as mdates で良いですか?
SAMI1220

2021/09/21 11:10

mport matplotlib matplotlib.use("Agg") import matplotlib.dates as mdates import json from requests_oauthlib import OAuth1Session import tweepy import matplotlib.pyplot as plt import pandas as pd import numpy as np import seaborn as sns sns.set(font='Hiragino Sans') これらをインポートしてます
SAMI1220

2021/09/21 11:11

import matplotlib.dates as mdatesで大丈夫です!
guest

回答2

0

お返事遅くなりすみません。

教えていただいたコードで分数の表示までできました。

ただx軸の分数表示が重なり合ったままなので、色々とためして重ならない表示方法を探したいと思います。

ありがとうございました。

投稿2021/09/22 15:11

SAMI1220

総合スコア-1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

下記データフレームを例とします。

リツイート数 ツイート日時 0 16 2021-09-12 07:41:17 1 1 2021-09-12 07:37:56 2 6 2021-09-12 07:37:46 3 1 2021-09-12 07:37:41 4 1 2021-09-12 07:37:38

python

1import pandas as pd 2import matplotlib.pyplot as plt 3import matplotlib.dates as mdates 4import matplotlib.ticker as ticker 5from matplotlib.dates import date2num 6 7new_xticks = date2num(df[df['リツイート数']>0]['ツイート日時']) 8 9fig, ax = plt.subplots(figsize=(25, 12)) 10ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d\n%H:%M')) 11plt.bar(df['ツイート日時'], df['リツイート数'], width=0.0001, label='Retweet', edgecolor='b') 12plt.xticks(rotation=90) 13ax.xaxis.set_major_locator(ticker.FixedLocator(new_xticks)) 14plt.xlabel('tweet_daytime') 15plt.ylabel('like_count') 16plt.legend() 17plt.xlim(min(new_xticks), max(new_xticks)) 18plt.tight_layout() 19plt.show()

イメージ説明

※日付を縦1列にしたかったのですが出来ていません。
コードをよく見たらmdates.DateFormatter('%m/%d\n%H:%M')で改行されてましたね。


【追記】
表示を分までにするには元のデータを「分」までのデータに変換の上、ラベル作成部分を下記に変えれば良いかと思います。

new_xticks = date2num(df[df['リツイート数']>0]['ツイート日時'].drop_duplicates())

イメージ説明

投稿2021/09/21 12:10

編集2021/09/21 12:54
meg_

総合スコア10607

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問