鉴于以下代码:
import matplotlib.pyplot as plt
import numpy as np
x = [1.0, 1.1, 2.0, 5.7]
y = np.arange(len(x))
fsize=(2,2)
fig, ax = plt.subplots(1,1,figsize=fsize)
ax.set_yticklabels(['a','b','c','d'])
ax.barh(y,x,align='center',color='grey')
plt.show()
Run Code Online (Sandbox Code Playgroud)
为什么标签没有按预期显示('a' 没有出现并且所有内容都向下移动了 1 位)?
我想在此图表中的每个条形上方绘制一条水平线。每个条形的 y 轴位置取决于变量“目标”。如果可能,我想使用 axhline 或 Line2D,因为我需要能够修改线条样式、颜色、长度和宽度。
import matplotlib.pyplot as plt
plt.rcdefaults()
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# Example data
people = ('Tom', 'Dick', 'Harry', 'Slim', 'Jim')
#Here are the targets that I want to use
#to plot horizontal lines above each bar...
targets = (6,6,8,6,9)
ind = np.arange(len(people))
performance = 3 + 10 * np.random.rand(len(people))
error = np.random.rand(len(people))
plt.bar(ind, performance, align='center')
plt.xticks(ind, people)
plt.show()
Run Code Online (Sandbox Code Playgroud)
提前致谢!
给定下面的代码,它产生一个热图,我如何得到列"D"(总列)显示为热图右侧的一列没有颜色,只是对齐每个单元格的总值?我也试图将标签移到顶部.我不介意左边的标签是水平的,因为我的实际数据不会出现这种情况.
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
%matplotlib inline
df = pd.DataFrame(
{'A' : ['A', 'A', 'B', 'B','C', 'C', 'D', 'D'],
'B' : ['A', 'B', 'A', 'B','A', 'B', 'A', 'B'],
'C' : [2, 4, 5, 2, 0, 3, 9, 1],
'D' : [6, 6, 7, 7, 3, 3, 10, 10]})
df=df.pivot('A','B','C')
fig, ax = plt.subplots(1, 1, figsize =(4,6))
sns.heatmap(df, annot=True, linewidths=0, cbar=False)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是期望的结果:
提前致谢!
给定以下列表列表:
a = [[2,3],[1,2,3],[1]]
Run Code Online (Sandbox Code Playgroud)
我需要中的每个列表都具有相同数量的元素。首先,我需要获得a中所有列表的最长长度。然后,我需要确保所有列表至少都这么长。如果不是,我想在末尾添加零(0),直到正确为止。理想的结果是:
b = [[2,3,0],[1,2,3],[1,0,0]]
Run Code Online (Sandbox Code Playgroud)
提前致谢!
PS,我还需要将此应用到这样的Pandas Data Frame:
import pandas as pd
b = [[2,3,0],[1,2,3],[1,0,0]]
f=pd.DataFrame({'column':b})
Run Code Online (Sandbox Code Playgroud) 给定以下数据框: import pandas as pd
d=pd.DataFrame({'a':['a','a','b','b'],
'b':['a','b','c','d'],
'c':[1,2,3,4]})
d=d.groupby(['a','b']).sum()
d
Run Code Online (Sandbox Code Playgroud)
我想以与索引相同的对齐方式导出它(看看最左边的列如何垂直居中?)。问题在于,将其导出到 Excel 时,左列与每个单元格的顶部对齐:
writer = pd.ExcelWriter('pandas_out.xlsx', engine='xlsxwriter')
workbook = writer.book
f=workbook.add_format({'align': 'vcenter'})
d.to_excel(writer, sheet_name='Sheet1')
writer.save()
Run Code Online (Sandbox Code Playgroud)
...产生...
有没有办法通过 XLSX Writer 或其他库垂直居中 A 列?
提前致谢!
给出以下数据框:
import pandas as pd
d = pd.DataFrame({'a':[1,2,3],'b':[np.nan,5,6]})
d
a b
0 1 NaN
1 2 5.0
2 3 6.0
Run Code Online (Sandbox Code Playgroud)
我想用列名替换所有非空值.
期望的结果:
a b
0 a NaN
1 a b
2 a b
Run Code Online (Sandbox Code Playgroud)
实际上,我有很多专栏.
提前致谢!
更新以从根回答: 要对列的子集执行此操作:
d.loc[:,d.columns[3:]] = np.where(d.loc[:,d.columns[3:]].notnull(), d.loc[:,d.columns[3:]].columns, d.loc[:,d.columns[3:]])
Run Code Online (Sandbox Code Playgroud) 鉴于以下情况:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[np.nan,1,2],'b':[np.nan,np.nan,4]})
a b
0 NaN NaN
1 1.0 NaN
2 2.0 4.0
Run Code Online (Sandbox Code Playgroud)
如何返回列“a”和“b”均为空的行,而不必pd.isnull对每一列使用?
期望的结果:
a b
0 NaN NaN
Run Code Online (Sandbox Code Playgroud)
我知道这是可行的(但这不是我想要的方式):
df.loc[(pd.isnull(df['a']) & (pd.isnull(df['b'])]
Run Code Online (Sandbox Code Playgroud)
我试过这个:
df.loc[pd.isnull(df[['a', 'b']])]
Run Code Online (Sandbox Code Playgroud)
...但出现以下错误:
ValueError: Cannot index with multidimensional key
Run Code Online (Sandbox Code Playgroud)
提前致谢!
给定这里的形状文件:我想用自定义颜色绘制下面指定的一组县;韦恩县和华盛顿州为“蓝色”,其他县为“灰色”。
import geopandas as gpd
import matplotlib.pyplot as plt
%matplotlib inline
shpfile=<Path to unzipped .shp file referenced and linked above>
c=gpd.read_file(shpfile)
c=c.loc[c['GEOID'].isin(['26161','26093','26049','26091','26075','26125','26163','26099','26115','26065'])]
c.plot()
Run Code Online (Sandbox Code Playgroud)
我希望先将颜色分配为数据框中的一列,然后在以某种方式绘制时调用它们。这可能吗?
更新
我已经尝试过像散点图那样传递列表并在循环中进行绘制,但是它的工作方式似乎并不相同,因为它只是绘制单独的县地图,而不是在一个图中绘制所有的县地图。
这是我尝试过的:
color=['b','b','b','b','b','c','c','c','c','c']
for i in range(10):
c.iloc[i:i+1].plot(c='white',linewidth=.5,color=color[i])
Run Code Online (Sandbox Code Playgroud)
提前致谢!
给定以下内容:
import seaborn as sns
attend = sns.load_dataset("attention")
sns.set_style("whitegrid", {'axes.grid' : False,'axes.edgecolor':'none'})
g = sns.FacetGrid(attend, col="subject", col_wrap=5,
size=1.5, ylim=(0, 10))
ax = g.map(sns.pointplot, "solutions", "score", scale=.7)
Run Code Online (Sandbox Code Playgroud)
我想在每行上标记单个数据点(用值标签代替点)。在我仅通过MatPlotLib创建的另一个绘图中,这是这样完成的:
for i, text in enumerate(ind):
a.annotate(str(y[i])[:-2], xy=(ind[i], y[i]),fontsize=6, color=c,
bbox=dict(pad=.9,alpha=1, fc='white',color='none'),va='center', ha='center',weight='bold')
Run Code Online (Sandbox Code Playgroud)
但是,由于没有定义ind,所以我不确定这将如何工作。
给定以下数据框:
import pandas as pd
df=pd.DataFrame({'A':['a','b','c'],
'B':[[[1,2],[3,4],[5,6]],[[1,2],[3,4],[5,6]],[[1,2],[3,4],[5,6]]]})
df
A B
0 a [[1, 2], [3, 4], [5, 6]]
1 b [[1, 2], [3, 4], [5, 6]]
2 c [[1, 2], [3, 4], [5, 6]]
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列 ('C'),其中包含列 B 的元组的每个元素中的第一个值,如下所示:
A B C
0 a [[1, 2], [3, 4], [5, 6]] [1,3,5]
1 b [[1, 2], [3, 4], [5, 6]] [1,3,5]
2 c [[1, 2], [3, 4], [5, 6]] [1,3,5]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过:
df['C']=df['B'][0]
Run Code Online (Sandbox Code Playgroud)
...但这只会返回第一个元组 ([1, 2])。
提前致谢!
python ×6
pandas ×5
matplotlib ×3
python-3.x ×3
seaborn ×2
bar-chart ×1
dataframe ×1
facet-grid ×1
geopandas ×1
isnull ×1
lines ×1
list ×1
numpy ×1
replace ×1
tuples ×1
xlsxwriter ×1