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

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

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

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

Python

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

Q&A

1回答

5107閲覧

matplotlibで描画した散布図のy軸の目盛りを文字列に変えたい

piyotechi

総合スコア15

Matplotlib

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

Python

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

0グッド

1クリップ

投稿2020/06/18 06:29

編集2020/06/18 06:33

前提・実現したいこと

以下のdataframeの散布図を描画したいです。
|index|"出願者"|"出願年"|"count"|
|:--|:--:|--:|
|0|●●さん|2000|3|
|1|××さん|1998|2|
|2|△△さん|2005|1|

インデックスは90まであります。

イメージ説明
画像中の0,20,40,...の部分を出願者(文字列)にして、yearを左から1998,2000,...(跳んでるとことは無視)にしたいです。プロットの大きさに"count"の数値を影響させています。

エクセルファイルからカラムを指定し読み取った値をdataframeに入れているのですがその部分は省いてソースを書きました。ソース中のresがdataframeです。

発生している問題・エラーメッセージ

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

該当のソースコード

python

1import pandas as pd 2import os 3import matplotlib.pyplot as plt #Visulization 4import seaborn as sns #Visulization 5import numpy as np 6 7res = res.sort_values(by='count', ascending=True).reset_index(drop = True) 8year_plot = res["出願年"] 9person_plot = res.index+1 10sum_plot = res["count"] 11person_name_plot = res["出願者"] 12fig = plt.figure(figsize=(15, 5)) 13ax = fig.add_subplot(111) 14ax.set_title('number of patent', fontsize = 15) 15ax.set_xlabel('year', fontsize =12) 16ax.set_ylabel('Applicant', fontsize = 12) 17ax.scatter(year_plot, person_plot, s=50*sum_plot, 18 c=person_plot, cmap="plasma_r", alpha=0.75) 19 20plt.show()

試したこと

y軸目盛をindexから出願者に置き換えようと以下コードを追加したらエラーが出た。
ax.set_yticks(person_plot, person_name_plot)

補足情報(FW/ツールのバージョンなど)

python3.7
spyder4.1.3

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

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

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

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

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

guest

回答1

0

pyplotだと質問文の方法でtickが置換できますが、axesでは方法がちょっと異なります。
ax.set_yticksax.set_yticklabelsをセットで設定します。

python

1# set_yticks で元の座標リストをセットし 2ax.set_yticks(person_plot) 3# set_yticklabels で置換する文字列リストをセットする 4ax.set_yticklabels(person_name_plot)

ただ、matplotlibは素の状態だと日本語文字を描画できないので、japanize_matplotlibのような日本語対応フォントを読み込む対策が必要です。

yearが昇順に並んでいないのは提示のデータではうまく再現できないのでテストできないですが、冒頭のsort_valuesにて'出願年'でソートすればどうでしょうか。

投稿2020/06/18 14:21

hope_mucci

総合スコア4447

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

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

piyotechi

2020/06/21 23:25

上記手法で書き換えたところy軸の目盛りを置き換えることができました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問