matplotlib 中的气泡图或热图
Bubble plot or Heatmap in matplotlib
我正在尝试绘制一个可动态调整大小的气泡(散点图)。当我尝试用随机数据绘制时,我可以很好地绘制。但是当我试图解析我的输入文件时,我无法绘制。
输入:
Nos,Place,Way,Name,00:00:00,12:00:00
123,London,Air,Apollo,342,972
123,London,Rail,Beta,2352,342
123,Paris,Bus,Beta,545,353
345,Paris,Bus,Rava,652,974
345,Rome,Bus,Rava,2325,56
345,London,Air,Rava,2532,9853
567,Paris,Air,Apollo,545,544
567,Rome,Rail,Apollo,5454,5
876,Japan,Rail,Apollo,644,54
876,Japan,Bus,Beta,45,57
节目:
import pandas as pd
from pandas import DataFrame
import pandas.io.data
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
df=pd.read_csv('text_2.csv')
#SIZE OF BUBBLES CHANGES
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(df['Place'],df['Name'], s=df['00:00:00']) # Added third variable income as size of the bubble
plt.show()
我正在尝试将 Place
设为 x axis
,将 Name
设为 y axis
,将 Size
设为 count(00:00)
。相当大的泡沫我找不到太多的例子。任何有价值的建议都会被采纳。提前致谢。
为什么我在 (00:00) 列出现错误以及如何传递该列的值?
错误:
Traceback (most recent call last):
File "Bubble_plot.py", line 18, in <module>
ax.scatter(df['Place'],df['Name'], s=df['00:00:00']) # Added third variable income as size of the bubble
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 6266, in scatter
x, y, s, c = cbook.delete_masked_points(x, y, s, c)
File "/usr/lib/pymodules/python2.7/matplotlib/cbook.py", line 1774, in delete_masked_points
raise ValueError("First argument must be a sequence")
ValueError: First argument must be a sequence
我希望这可以通过将 'Name' 和 'Place' 更改为分类来实现,但运气不好(无论是 plot 还是 seaborn)。如果您将它们转换为整数,它基本上会起作用,但随后您会丢失字符串或分类标签。 FWIW:
df2 = df.copy()
for c in ['Place','Name']:
df2[c] = df2[c].astype('category').cat.codes
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(df2['Place'],df2['Name'], s=df2['00:00:00'])
或者也许热图会更好?它似乎接受分类,所以你可以免费获得标签。
df3 = df.copy()
for c in ['Place','Name']:
df3[c] = df3[c].astype('category')
sns.heatmap( df3.pivot_table( index='Place', columns='Name', values='00:00:00' ) )
我正在尝试绘制一个可动态调整大小的气泡(散点图)。当我尝试用随机数据绘制时,我可以很好地绘制。但是当我试图解析我的输入文件时,我无法绘制。
输入:
Nos,Place,Way,Name,00:00:00,12:00:00
123,London,Air,Apollo,342,972
123,London,Rail,Beta,2352,342
123,Paris,Bus,Beta,545,353
345,Paris,Bus,Rava,652,974
345,Rome,Bus,Rava,2325,56
345,London,Air,Rava,2532,9853
567,Paris,Air,Apollo,545,544
567,Rome,Rail,Apollo,5454,5
876,Japan,Rail,Apollo,644,54
876,Japan,Bus,Beta,45,57
节目:
import pandas as pd
from pandas import DataFrame
import pandas.io.data
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
df=pd.read_csv('text_2.csv')
#SIZE OF BUBBLES CHANGES
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(df['Place'],df['Name'], s=df['00:00:00']) # Added third variable income as size of the bubble
plt.show()
我正在尝试将 Place
设为 x axis
,将 Name
设为 y axis
,将 Size
设为 count(00:00)
。相当大的泡沫我找不到太多的例子。任何有价值的建议都会被采纳。提前致谢。
为什么我在 (00:00) 列出现错误以及如何传递该列的值?
错误:
Traceback (most recent call last):
File "Bubble_plot.py", line 18, in <module>
ax.scatter(df['Place'],df['Name'], s=df['00:00:00']) # Added third variable income as size of the bubble
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 6266, in scatter
x, y, s, c = cbook.delete_masked_points(x, y, s, c)
File "/usr/lib/pymodules/python2.7/matplotlib/cbook.py", line 1774, in delete_masked_points
raise ValueError("First argument must be a sequence")
ValueError: First argument must be a sequence
我希望这可以通过将 'Name' 和 'Place' 更改为分类来实现,但运气不好(无论是 plot 还是 seaborn)。如果您将它们转换为整数,它基本上会起作用,但随后您会丢失字符串或分类标签。 FWIW:
df2 = df.copy()
for c in ['Place','Name']:
df2[c] = df2[c].astype('category').cat.codes
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(df2['Place'],df2['Name'], s=df2['00:00:00'])
或者也许热图会更好?它似乎接受分类,所以你可以免费获得标签。
df3 = df.copy()
for c in ['Place','Name']:
df3[c] = df3[c].astype('category')
sns.heatmap( df3.pivot_table( index='Place', columns='Name', values='00:00:00' ) )