python数据标签重叠(python添加标签)
python matplotlib画的图坐标轴重叠,如何解决?
1.tight_layout命令:主要用于自动调整绘图区的大小及间距,使所有的绘图区及其标题、坐标轴标签等都可以不重叠的完整显示在画布上。
2.使用方法:fig.tight_layout()
效果如图:
3.此外
tight_layout命令还有三个关键字参数:pad、w_pad、h_pad。
pad用于设置绘图区边缘与画布边缘的距离大小
w_pad用于设置绘图区间水平距离的大小
h_pad用于设置绘图区间垂直距离的大小
使用方法:
fig.tight_layout(pad=0.4, w_pad=3.0, h_pad=3.0)
效果如下:
python绘图中四个绘图技巧
pre{overflow-x: auto}
技巧1: plt.subplots()
技巧2: plt.subplot()
技巧3: plt.tight_layout()
技巧4: plt.suptitle()
数据集:
让我们导入包并更新图表的默认设置,为图表添加一点个人风格。 我们将在提示上使用 Seaborn 的内置数据集:
import?seaborn?as?sns?#?v0.11.2?? import?matplotlib.pyplot?as?plt?#?v3.4.2?? sns.set(style='darkgrid',?context='talk',?palette='rainbow')df?=?sns.load\_dataset('tips')?? df.head()
技巧1: plt.subplots()
绘制多个子图的一种简单方法是使用 plt.subplots() 。
这是绘制 2 个并排子图的示例语法:
fig,?ax?=?plt.subplots(nrows=1,?ncols=2,?figsize=(10,4))?? sns.histplot(data=df,?x='tip',?ax=ax[0])?? sns.boxplot(data=df,?x='tip',?ax=ax[1]);
在这里,我们在一个图中绘制了两个子图。 我们可以进一步自定义每个子图。
? 例如,我们可以像这样为每个子图添加标题:
fig,?ax?=?plt.subplots(1,?2,?figsize=(10,4))?? sns.histplot(data=df,?x='tip',?ax=ax[0])?? ax[0].set\_title("Histogram")?? sns.boxplot(data=df,?x='tip',?ax=ax[1])?? ax[1].set\_title("Boxplot");
在循环中将所有数值变量用同一组图表示:
numerical?=?df.select\_dtypes('number').columnsfor?col?in?numerical:?? ?fig,?ax?=?plt.subplots(1,?2,?figsize=(10,4))?? ?sns.histplot(data=df,?x=col,?ax=ax[0])?? ?sns.boxplot(data=df,?x=col,?ax=ax[1]); 技巧2: plt.subplot()
另一种可视化多个图形的方法是使用 plt.subplot(), 末尾没有 s
? 语法与之前略有不同:
plt.figure(figsize=(10,4))?? ax1?=?plt.subplot(1,2,1)?? sns.histplot(data=df,?x='tip',?ax=ax1)?? ax2?=?plt.subplot(1,2,2)?? sns.boxplot(data=df,?x='tip',?ax=ax2);
当我们想为多个图绘制相同类型的图形并在单个图中查看所有图形,该方法特别有用:
plt.figure(figsize=(14,4))?? for?i,?col?in?enumerate(numerical):?? ?ax?=?plt.subplot(1,?len(numerical),?i+1)?? ?sns.boxplot(data=df,?x=col,?ax=ax)
我们同样能定制子图形。例如加个 title
plt.figure(figsize=(14,4))?? for?i,?col?in?enumerate(numerical):?? ?ax?=?plt.subplot(1,?len(numerical),?i+1)?? ?sns.boxplot(data=df,?x=col,?ax=ax)??? ?ax.set\_title(f"Boxplot?of?{col}")
通过下面的比较,我们能更好的理解它们的相似处与不同处熟悉这两种方法很有用,因为它们可以在不同情况下派上用场。
技巧3: plt.tight_layout()
在绘制多个图形时,经常会看到一些子图的标签在它们的相邻子图上重叠,
如下所示:
categorical?=?df.select\_dtypes('category').columnsplt.figure(figsize=(8,?8))?? for?i,?col?in?enumerate(categorical):?? ?ax?=?plt.subplot(2,?2,?i+1)?? ?sns.countplot(data=df,?x=col,?ax=ax)
顶部两个图表的 x 轴上的变量名称被剪掉,右侧图的 y 轴标签与左侧子图重叠.使用 plt.tight_layout 很方便
plt.figure(figsize=(8,?8))?? for?i,?col?in?enumerate(categorical):?? ?ax?=?plt.subplot(2,?2,?i+1)?? ?sns.countplot(data=df,?x=col,?ax=ax)??? plt.tight\_layout()
专业 看起来更好了。
技巧4: plt.suptitle()
真个图形添加标题:
plt.figure(figsize=(8,?8))?? for?i,?col?in?enumerate(categorical):?? ?ax?=?plt.subplot(2,?2,?i+1)?? ?sns.countplot(data=df,?x=col,?ax=ax)??? plt.suptitle('Category?counts?for?all?categorical?variables')?? plt.tight\_layout()
此外,您可以根据自己的喜好自定义各个图。 例如,您仍然可以为每个子图添加标题。
到此这篇关于python绘图 四个绘图技巧的文章就介绍到这了,希望大家以后多多支持!
python数据标签分布是干啥的
一般是根据分析目的,将数据进行分组,研究各组别分布规律的一种分析方法。数据分组方式有两种:等距或不等距分组。
分布分析在实际的数据分析实践中应用非常广泛,常见的有用户性别分布,用户年龄分布,用户消费分布等等。
本文将进行如下知识点讲解:
1.数据类型的修改
2.新字段生成方法
3.数据有效性校验
4.性别与年龄分布
分布分析
1.导入相关库包
import pandas as pd
import matplotlib.pyplot as plt
import math
2.数据处理
df = pd.read_csv('UserInfo.csv')
df.info()
RangeIndex: 1000000 entries, 0 to 999999
Data columns (total 4 columns):
UserId 1000000 non-null int64
CardId 1000000 non-null int64
LoginTime 1000000 non-null object
DeviceType 1000000 non-null object
dtypes: int64(2), object(2)
memory usage: 30.5+ MB
由于接下来我们需要做年龄分布分析,但是从源数据info()方法可知,并无年龄字段,需要自己生成。
# 查看年龄区间,进行分区
df['Age'].max(),df['Age'].min()
# (45, 18)
bins = [0,18,25,30,35,40,100]
labels = ['18岁及以下','19岁到25岁','26岁到30岁','31岁到35岁','36岁到40岁','41岁及以上']
df['年龄分层'] = pd.cut(df['Age'],bins, labels = labels)
3.计算年龄
由于数据来源于线下,并未进行数据有效性验证,在进行年龄计算前,先针对数据进行识别,验证。
# 提取出生日期:月和日
df[['month','day']] = df['DateofBirth'].str.split('-',expand=True).loc[:,1:2]
# 提取小月,查看是否有31号
df_small_month = df[df['month'].isin(['02','04','06','09','11'])]
# 无效数据,如图所示
df_small_month[df_small_month['day']=='31']
# 统统删除,均为无效数据
df.drop(df_small_month[df_small_month['day']=='31'].index,inplace=True)
# 同理,校验2月
df_2 = df[df['month']=='02']
# 2月份的校验大家可以做的仔细点儿,先判断是否润年再进行删减
df_2[df_2['day'].isin(['29','30','31'])]
# 统统删除
df.drop(df_2[df_2['day'].isin(['29','30','31'])].index,inplace=True)
# 计算年龄
# 方法一
df['Age'] = df['DateofBirth'].apply(lambda x : math.floor((pd.datetime.now() - pd.to_datetime(x)).days/365))
# 方法二
df['DateofBirth'].apply(lambda x : pd.datetime.now().year - pd.to_datetime(x).year)
4.年龄分布
# 查看年龄区间,进行分区
df['Age'].max(),df['Age'].min()
# (45, 18)
bins = [0,18,25,30,35,40,100]
labels = ['18岁及以下','19岁到25岁','26岁到30岁','31岁到35岁','36岁到40岁','41岁及以上']
df['年龄分层'] = pd.cut(df['Age'],bins, labels = labels)
由于该数据记录的是用户登录信息,所以必定有重复数据。而Python如此强大,一个nunique()方法就可以进行去重统计了。
# 查看是否有重复值
df.duplicated('UserId').sum() #47681
# 数据总条目
df.count() #980954
分组后用count()方法虽然也能够计算分布情况,但是仅限于无重复数据的情况。而Python这么无敌,提供了nunique()方法可用于计算含重复值的情况
如何解决python柱状图标签和图重叠的问题?
个人看法哈,数据图形化,除了直观地展示数据外,还需注意图表的美观。
对于这个图,内部柱子都快顶到上边界了。为了美观,一般都会留白的,比如下面这个图:
所以,如要解决你所提出的问题,就我的了解而言,只有增大Y轴的数值。一旦Y轴的值增大,图的上部分就留出了足够多的空白,一方面解决你所遇到的问题,另一方面图形看起来美观自然一些,没之前那么紧凑。
如何解决python matplotlib 绘制饼图标签重叠
matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。
它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。