Метеорологический чертеж cmap, суперподробная версия cbar (с примерами)
Метеорологический чертеж cmap, суперподробная версия cbar (с примерами)

Следующая статья принадлежит Юнтай Шуши, автор Юнтай Шуши.

Краткое описание этого раздела: Универсальное руководство по цветовой карте и цветовой панели.


Введение в главу:

В matplotlib и cartopy, если общими командами рисования являются классы коллекций с отображением цветов, вы можете в основном использовать функции cmap и colorbar для анализа данных. cmap — это таблица сопоставления цветов, а colorbar — это цветовая панель анализа цвета. Первая функция предназначена только для раскрашивания рисуемого объекта, а вторая реализует соответствие между уровнями цвета и значениями.

Общие команды рисования scatter, контур, контур, pcolormesh и т. д. могут быть введены в cmap и colorbar. Следующие четыре изображения рисуются с использованием четырех вышеуказанных команд рисования, и таблица сопоставления цветов, используемая в каждом изображении, изменяется:

Введение cmap

В качестве специализированного пакета библиотеки визуализации данных matplotlib специально разработал функцию cm для использования плоттерами. Если вам нужно использовать карту цветов, вы можете использовать оператор get для получения карты цветов:

Язык кода:javascript
копировать
importmatplotlib as mpl                                                                                    
colormap=mpl.cm.get_cmap(' Reds ' )                                                              
ax.contourf(cmap=colormap)

Вы также можете добавить имя карты цветов непосредственно после cm вместо строки. Здесь два метода эквивалентны:

Язык кода:javascript
копировать
colormap=mpl.cm.Reds

Конечно, здесь эта команда get кажется громоздкой. Более простой метод — напрямую передать строку, представляющую карту цветов, непосредственно в cmap в команде рисования:

Язык кода:javascript
копировать
ax.contourf(cmap='Reds ')

При использовании таблицы сопоставления цветов не обязательно запоминать все репрезентативные строки. Прежде чем использовать ее, мы можем выполнить поиск на официальном сайте.

Cmap по умолчанию в Matplotlib — viridis.

Перевернуть порядок цветов cmap

Поскольку карта цветов cmap представляет собой массив с фиксированным порядком хранения, мы можем перевернуть соответствующий порядок cmap и значений, когда это необходимо. Команда переворота заключается в добавлении '_r' в конец строки в карте цветов.

Язык кода:javascript
копировать
ax1.contourf(X,Y,Z,cmap='Reds')                                               
ax2.contourf(X,Y,Z,cmap='Reds_r')

Классификация cmap

matplotlib специально предоставляет различные таблицы сопоставления цветов, которые подробно описаны в руководстве «Выбор цветовых карт в Matplotlib» в разделе «Учебные пособия» на официальном сайте.

Согласно инструкции на официальном сайте, цветовая карта кратко имеет следующие шесть категорий:

1. Последовательный: яркость и насыщенность цветов изменяются постепенно, используя один оттенок для отображения упорядоченной информации. Cmap по умолчанию в Matplotlib — «viridis» попадает в эту категорию. Этот тип визуального воздействия невелик. Если разделение градиента хорошее, в определенный момент последовательные соседние уровни цвета могут перепутаться.

2. Расхождение: яркость и насыщенность разных цветов постепенно меняются. В основном используется для отображения данных, симметричных относительно 0.

3. Циклический: Яркость двух разных цветов постепенно меняется, заканчиваясь ненасыщенным цветом в середине и начале (или конце) карты цветов. Обычно применяется к значениям, зацикленным на конечных точках.

4. Качественный: таблица сопоставления цветов, в которой различные цвета сочетаются в неупорядоченном порядке. Используется для отображения неупорядоченной информации.

5. Разное: различные контрастные цвета соединяются вместе, обычно используются для отображения изменений в деталях информации.

Ниже приведены различные таблицы сопоставления цветов, предоставленные официальным сайтом matplotlib:

Вот еще несколько рекомендуемых практических cmap:

GnBu、gray、cool、bwr、RdBu、tab20c

Среди них GnBu, RdBu и tab20c относительно мягкие, тогда как Cool и BWR оказывают сильное визуальное воздействие.

Внедрение внешнего cmap

Поскольку таблица сопоставления цветов, предоставляемая matplotlib, ограничена, нам также необходимо использовать пакеты внешних библиотек для предоставления дополнительных таблиц сопоставления цветов. Два внешних пакета библиотеки цветов, обычно используемых в науках об атмосфере и океане, — это Palettable и cmaps. Оба этих пакета библиотеки можно установить с помощью команды conda. Palettable используется во многих местах как классический пакет библиотеки цветов; пакет библиотеки cmaps переносит цвета платформы NCL на платформу Python Jiahui Xuelin.

Вот несколько примеров таблиц отображения цветов cmaps:

Дополнительные названия таблиц сопоставления цветов можно найти на официальном сайте.

При использовании cmaps вам нужно только импортировать пакет библиотеки, а затем ввести имя цвета. После введения его можно рассматривать и использовать как обычную внутреннюю карту цветов matplotlib:

Язык кода:javascript
копировать
import cmaps                                                               
cmap=cmaps.MPL_RdYlGn                                                  
ax.contourf(cmap=cmap)

перехватить cmap

в ежедневном использовании,Вероятно, нам нужна только часть карты цветов.,В это время вам необходимо выполнить работу по перехвату cmap,Как упоминалось ранее, массивы, объединенные в серию списков цветов, являются сутью cmap.,Таким образом, мы можем легко подумать о перехвате cmap путем разрезания,нарезая,Мы отсекли все теплые цвета на цветовой панели jet_r.

Язык кода:javascript
копировать
import numpy asnp                                                            
importmatplotlib as mpl                                                         
importmatplotlib.pyplot as plt                                                  
frommatplotlib.colors import ListedColormap                                   
cmap=mpl.cm.jet_r#Получить цветную полосу                                                    
newcolors=cmap(np.linspace(0,1,256))#Операция сегментирования                                  
newcmap=ListedColormap(newcolors[125:])#Выбор фрагмента                                  
fig=plt.figure(figsize=(1.5,0.3),dpi=500)                                  
ax1=fig.add_axes([0,0,1,0.45])                                                 
ax2=fig.add_axes([0,0.5,1,0.45])                                              
norm =mpl.colors.Normalize(vmin=0, vmax=10)                                
fc1=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap='jet_r'),              
                 cax=ax1,                                                      
                 orientation='horizontal',                                                         
                 extend='both')                                                                    
fc2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=newcmap),                                            
                 cax=ax2,                                                      
                 orientation='horizontal',                                         
                 extend='both')                                                 
for i in[fc1,fc2]:                                                           
    i.ax.tick_params(labelsize=3,width=0.5,length=0.5)                           
    i.outline.set_linewidth(0.5)                                              

Сращивание cmap

Поскольку оно можетнарезаяспособперехватить cmap, то мы можем использовать комбинацию естественных обратных методов. cmap。

Язык кода:javascript
копировать
import numpy asnp                                                        
importmatplotlib as mpl                                                       
importmatplotlib.pyplot as plt                                                        
frommatplotlib.colors import ListedColormap                                 
import cmaps                                                                    
plt.rcParams['font.sans-serif']=['FangSong']                                 
cmap1=cmaps.spread_15lev_r                                                   
cmap2=cmaps.sunshine_diff_12lev                                                
list_cmap1=cmap1(np.linspace(0,1,15))                                      
list_cmap2=cmap2(np.linspace(0,1,12))                                           
new_color_list=np.vstack((list_cmap1,list_cmap2))                            
new_cmap=ListedColormap(new_color_list,name='new_cmap ')                                                                      
fig=plt.figure(figsize=(1.5,0.5),dpi=500)                                        
ax1=fig.add_axes([0,0,1,0.33])                                                 
ax2=fig.add_axes([0,0.33,1,0.33])                                            
ax3=fig.add_axes([0,0.66,1,0.33])                                              
norm =mpl.colors.Normalize(vmin=0, vmax=10)                              
fc1=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,                            
                 cmap=cmap1),cax=ax1,                                     
                 orientation='horizontal',extend='both')                       
fc2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,                      
                 cmap=cmap2),cax=ax2,                                      
                 orientation='horizontal',extend='both')                    
fc3=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,                         
                 cmap=new_cmap),cax=ax3,                                
                 orientation='horizontal',extend='both')                    

основы цветной панели

Цветовая панель — это специальный графический элемент, используемый в командах рисования с отображением цветов для представления соответствия между цветами и значениями. В отличие от команды Legend, matplotlib позволяет пользователям добавлять цветные полосы неограниченное количество раз без использования других функций.

Введение цветовой панели может быть активным или пассивным. Активный и пассивный здесь нацелены на корреляцию между цветовой полосой и командами рисования фрагментов изображения.

Чтобы добавить цветовую панель, используйте следующую команду:

Язык кода:javascript
копировать
importmatplotlib.pyplot as plt                                               
fig=plt.figure()                                                               
fig.colorbar()

или

Язык кода:javascript
копировать
plt.colorbar()

Введение активной цветовой панели

Активная цветовая полоса относится к методу добавления, который напрямую связан с командой рисования подграфа, к которому в данный момент добавлена ​​цветовая полоса. В частности, команда рисования сокращается и затем передается в качестве источника сопоставления сгенерированной команде цветной панели, например:

Язык кода:javascript
копировать
CS=ax1.contourf(X,Y,Z,cmap=cmaps.sunshine_diff_12lev)                    
cb=fig.colorbar(CS,shrink=1,ax=ax1)                                     
CS2=ax2.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                        
cb2=fig.colorbar(CS2,shrink=1,ax=ax2)                        

Обе графики здесь являются активными цветными полосами. На рисунке 1 мы называем CS и CS2 источником генерируемой нами цветовой панели. Передавая коллекции контуров, представленные CS и CS2, мы относительно легко сгенерировали цветовую полосу.

Введение в пассивную цветовую панель

Пассивная цветовая полоса в основном относится к корреляции, которая не использует команды рисования в подграфе. Пользователь создает цветную полосу, которая не имеет прямой связи с подграфом, определяя такие параметры, как норма и cmap, такие как:

Язык кода:javascript
копировать
CS=ax1.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                        
cb=fig.colorbar(CS,ax=ax1)                                      
ax2.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                                   
cmap=cmaps.MPL_RdYlGn                                                        
bounds=np.arange(-2.0,2.5,0.5)                                               
norm =mpl.colors.BoundaryNorm(bounds,cmap.N)                            
cb2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=cmap),         
                 ax=ax2)

С помощью нормы и cmap, объявленных пользователем, мы получаем цветовую полосу, точно такую ​​же, как активная цветовая полоса. Хотя это не так просто, как прямая передача активного источника, это более полезно для некоторой расширенной настройки на более позднем этапе.

Список важных параметров Colorbar

Как команда рисования, цветовая панель должна содержать множество параметров модификации. Ниже приведен краткий список каждого параметра:

1. отображаемый (отображаемый источник)

Этот параметр является источником изображения отображения, которое необходимо отрисовать.,Обычно команда рисования текущего подграфа по умолчанию:,Как упоминалось в предыдущем разделе, CS — это источник сопоставления, автоматически создаваемый mpl.cm.ScalarMappable. Для команды fig.colorbar,Этот параметр является обязательным,Однако если команда plt.colorbar используется без указания явного источника,Программа автоматически подтвердит отображаемые элементы текущего подграфа.

2. топор (положение фрагмента изображения, размещенного на цветовой панели)

Этот параметр управляет размещением нарисованной цветной полосы рядом с определенным фрагментом изображения. По умолчанию используется текущий фрагмент изображения. Вы можете передать один подграф или список подграфов.

3. cтопор (положение фрагмента изображения, размещенного на цветовой панели)

После установки этого параметра он имеет наивысший приоритет и будет охватывать сжатие, ось, аспект и другие параметры. Цветовая полоса будет размещена в указанной позиции, например:

Язык кода:javascript
копировать
cax=fig.add_axes([0.33,0,0.4,0.05])                                         
CS=ax1.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                        
cb=fig.colorbar(CS,shrink=1,cax=cax,orientation='horizontal')                
ax2.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                             

4. ориентация (особенность осей, горизонтальное и вертикальное положение размещения цветовой панели)

Этот параметр управляет горизонтальным и вертикальным положением цветовой панели. По умолчанию установлено вертикальное. Команда «Вертикально» — вертикально, а команда «Горизонтально» — горизонтально, как показано на рисунке под номером 3.

5. сжатие (функция осей, коэффициент сжатия цветовой панели)

Этот параметр управляет коэффициентом сжатия цветовой панели. При уменьшении длина и ширина цветовой панели будут меняться, например:

Язык кода:javascript
копировать
CS=ax1.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                                  
cb=fig.colorbar(CS,shrink=0.5,ax=ax1)                                     
CS2=ax2.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                          
cb2=fig.colorbar(CS,shrink=1.25,ax=ax2)                                 

6. аспект (функция осей, соотношение сторон цветовой панели)

Этот параметр управляет соотношением длины и ширины цветовой панели, например:

7. площадка (характеристики осей, расстояние между цветовой полосой и фрагментом изображения)

Этот параметр управляет расстоянием между цветовой полосой и фрагментом изображения, например:

8. расширить (характеристики цветовой панели, расширение цветовой панели на обоих концах)

Этот параметр может контролировать, разрешено ли расширение на обоих концах цветовой панели, и после расширения будут создаваться острые углы. Необязательные переменные: «neither», «both», «min» и «max». Следует отметить, что этот параметр не только генерирует острые углы, но и меняет цвет заливки, например:

9. Extendfrac (характеристики цветовой панели, относительная длина расширения на обоих концах цветовой панели)

Этот параметр управляет относительной длиной полученного маленького треугольника и основной части цветовой панели, например:

10. Extendrect (характеристики цветовой панели, относительная форма расширения на обоих концах цветовой панели)

Этот параметр управляет формой маленьких треугольников, полученных из обоих концов, и имеет две дополнительные переменные: True и False. При значении False два конца представляют собой маленькие треугольники, а при значении True, два конца представляют собой прямоугольники, например:

11. интервал (характеристики цветовой панели, интервал заполнения цветовой панели)

Этот параметр определяет, связан ли интервал заполнения цветовой панели с числовым интервалом. Он имеет две дополнительные переменные: равномерную и пропорциональную. Среди них единообразие означает, что все длины цветовой заливки одинаково равны независимо от того, равны или нет числовые интервалы. Это переменная по умолчанию. Пропорциональность означает, что если числовой интервал велик или мал, длина раскраски также изменится соответственно. Чем больше числовой интервал, тем длиннее будет длина раскраски, и наоборот, например:

12. тики (характеристики цветовой панели, интервал шкалы цветовой панели)

Этот параметр управляет масштабом отображения цветной полосы.

13. формат (характеристики цветовой панели, система единиц измерения цветовой шкалы)

Этот параметр управляет единицей измерения значения масштаба, отображаемого цветовой полосой, например:

14. drawedges (характеристики цветовой панели, рисует ли цветовая панель линии на границе)

Этот параметр определяет, следует ли рисовать линии на пересечении каждого цвета, элемент управления логическим значением, например:

15. label (характеристики цветовой панели, метка цветовой панели)

Этот параметр позволяет передать строку, которая будет использоваться в качестве метки цветовой панели.

Функция осей Colorbar

Из сценария генерации мы знаем, что цветовая панель должна генерировать оси как паразитную ось, поэтому колобар может вызывать некоторые функции подграфа. Метод вызова следующий:

Язык кода:javascript
копировать
CS=ax1.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                            
cb=fig.colorbar(CS,shrink=1,ax=ax1)                                      
cb.ax                                                                       

После вызова свойств субизображения мы можем использовать свойства субизображения для дальнейшего изменения цветовой панели, например:

Язык кода:javascript
копировать
def make_colorbar(cb):                                                      
    cb.ax.tick_params(labelsize=4,length=0.5,width=0.5)                      
    cb.outline.set_color('none')                                                 
cb=fig.colorbar(CS,shrink=1,ax=ax1)                                       
cb2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=cmap),         
                 ax=ax2)                          
for cb in[cb,cb2]:                                                           
    make_colorbar(cb)                                                     

Мы также можем изменить цветовую полосу, используя упомянутый ранее генератор масштаба, например:

Язык кода:javascript
копировать
CS=ax1.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                             
cb=fig.colorbar(CS,shrink=1,ax=ax1)                                        
cb.ax.yaxis.set_minor_locator(mticker.MultipleLocator(0.25))                  
ax2.contourf(X,Y,Z,cmap=cmaps.MPL_RdYlGn)                            
cmap=cmaps.MPL_RdYlGn                                                    
bounds=np.arange(-2.5,2.5,0.5)                                             
norm =mpl.colors.BoundaryNorm(bounds,cmap.N)                         
cb2=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=cmap),         
                 ax=ax2)                          

Техники рисования цветных полос с разными характеристиками

В какой-то момент цветная полоса, автоматически сгенерированная программой, после модификации все еще не может соответствовать нашим потребностям. На данный момент мы будем использовать некоторые средства для создания различных цветных полос с разными характеристиками. Ниже мы представим несколько распространенных методов рисования цветных полос особой формы.

1. кольцо цвета

Цвет кольца проявляется в том, что цветовая полоса не является линейной.,В рамках текущей структуры matplotlib,Существующие параметры цветной панели не могут быть изменены для получения аналогичной формы. В это время,Мы можем использовать только другие методы для имитации цветовой панели.

Здесь мы предоставляем два метода: во-первых, используйте метод гистограммы в полярной системе координат, во-вторых, используйте команду формы клина, чтобы нарисовать кольцо.

1.1 Метод построения гистограммы в полярной системе координат

Поскольку полярная система координат позволяет строить гистограммы,Гистограмму можно раскрасить с помощью параметра facecolor.,Поэтому его можно использовать в рисунке цвета кольца.,нравиться:

Язык кода:javascript
копировать
import numpy asnp                                                               
import xarray asxr                                                           
importmatplotlib.pyplot as plt                                                  
importcartopy.crs as ccrs                                                          
importcartopy.feature as cfeature                                             
importcartopy.io.shapereader as shpreader                                        
importmatplotlib.path as mpath                                                    
importmatplotlib as mpl                                                         
fromcartopy.util import add_cyclic_point                                           
from matplotlibimport cm,colors                                                 
fromcartopy.mpl.gridliner import LONGITUDE_FORMATTER,              
LATITUDE_FORMATTER                                                            
plt.rcParams['font.sans-serif']=['FangSong']#Используется для обычного отображения китайского языка             
plt.rcParams['axes.unicode_minus']=False#Используется для обычного отображения отрицательных знаков                
##Подготовка данных##                                                                
file=r'E:\aaaa\datanc\2019.6.23\fnl_20190620_00_00.grib2'                
data=xr.open_dataset(file,engine='cfgrib',                                   
backend_kwargs={'filter_by_keys':{'typeOfLevel': 'surface'}})                                                     
data['t']-273.15                                                             
data['latitude']                                                                 
data['longitude']                                                             
cycle_t,cycle_lon = add_cyclic_point(data['t']-273.15,                         
coord=data['longitude'])                                      
cycle_LON,cycle_LAT = np.meshgrid(cycle_lon,data['latitude'])                 
##рисование##                                                                
fig=plt.figure(figsize=(2,2),dpi=700)                                             
ax1=fig.add_axes([0,0,1,1],polar=True)                                    
ax1.set_axis_off()                                                            
ax2=fig.add_axes([0.127,0.123,0.75,0.75],                                  
projection=ccrs.SouthPolarStereo())                    
ax2.add_feature(cfeature.LAND)                                              
ax2.add_feature(cfeature.OCEAN)                                                
ax2.add_feature(cfeature.COASTLINE,lw=0.75)                               
##Граница обрезанного фрагмента изображения 2 имеет круглую форму##                                                  
theta =np.linspace(0, 2*np.pi, 100)                                       
center, radius =[0.5, 0.5], 0.5                                               
verts =np.vstack([np.sin(theta), np.cos(theta)]).T                             
circle =mpath.Path(verts * radius + center)                                    
ax2.set_boundary(circle,transform=ax2.transAxes)                          
##Нарисуйте карту цветов контуров##                                                         
cs=ax2.contourf(cycle_LON,cycle_LAT, cycle_t,                              
levels=np.arange(60,60,10),                               
cmap='RdBu_r',transform=ccrs.PlateCarree())              
##Получить информацию о карте контурной раскраски##                                              
cs.levels                                                                    
cmap=cm.get_cmap('RdBu_r',len(cs.levels)-1)                                 
angle=np.arange(0,0.5*np.pi,0.5*np.pi/(len(cs.levels)-1))                  
radius=np.array([2,2,2,2,2,2,2,2,2,2,2])                                     
cmaps=cmap(range(len(cs.levels)-1))                                    
ax1.set_theta_offset(np.pi/2)                                               
ax1.bar(angle,radius,width=0.5*np.pi/11,color=cmaps,align='center')           
for i,x,y inzip(cs.levels,angle,radius):                                         
    ax1.text(x-0.1,y+0.17,i,fontsize=3)                                      
ax1.text(0.9,2.6,'Температура: ℃',fontsize=4)                                       

1.2 Графический рисунок клина Кольцо цвета

Используйте графическую команду Wedge в matplotlib.patches, чтобы добавить цветную полосу в форме кольца в итерации цикла.

Язык кода:javascript
копировать
import numpy asnp                                                                  
import xarray asxr                                                        
importmatplotlib.pyplot as plt                                                 
importcartopy.crs as ccrs                                                     
importcartopy.feature as cfeature                                            
importcartopy.io.shapereader as shpreader                                   
importmatplotlib.path as mpath                                                
importmatplotlib as mpl                                                     
fromcartopy.util import add_cyclic_point                                      
from matplotlibimport cm,colors                                                
fromcartopy.mpl.gridliner import LONGITUDE_FORMATTER,                 
LATITUDE_FORMATTER                  
frommatplotlib.patches import Wedge                                           
plt.rcParams['font.sans-serif']=['FangSong']                                
plt.rcParams['axes.unicode_minus']=False                                    
file=r'E:\aaaa\datank\2019.6.23 сильный дождь\fnl_20190620_00_00.grib2'             
data=xr.open_dataset(file,engine='cfgrib',                                  
        backend_kwargs={'filter_by_keys':{'typeOfLevel': 'surface'}})                
data['t']-273.15                                                             
data['latitude']                                                                   
data['longitude']                                                               
cycle_t,cycle_lon = add_cyclic_point(data['t']-273.15,                             coord=data['longitude'])                               
cycle_LON,cycle_LAT = np.meshgrid(cycle_lon,data['latitude'])           
fig=plt.figure(figsize=(2,2),dpi=700)                                            
ax=fig.add_axes([0,0,1,1],projection=ccrs.PlateCarree())                    
ax.add_feature(cfeature.LAND)                                            
ax.add_feature(cfeature.OCEAN)                                               
ax.add_feature(cfeature.COASTLINE,lw=0.3)                                   
ax.spines['geo'].set_linewidth(0.5)                                        
cs=ax.contourf(cycle_LON,cycle_LAT, cycle_t,                               
               levels=np.arange(-60,60,10),cmap='RdBu_r',            
               transform=ccrs.PlateCarree(),extend='both')          
cmap=cm.get_cmap('RdBu_r',len(cs.levels)-1)                                
cmaps=cmap(range(len(cs.levels)-1))                                       
ax2=fig.add_axes([0.05,0.3,0.2,0.2])                                            
delta=360/(len(cs.levels)-1)                                                  
for c,p inzip(cmaps,range(len(cs.levels)-1)):                                    
    wedge=Wedge((0.5,0.5),0.4,delta*p,delta*(p+1),facecolor=c,         
    edgecolor='k',width=0.1,linewidth=0.1)                             
    ax2.add_patch(wedge)                                               
ax2.axis('off')                                                                   

2. Цветная полоса с треугольниками на обоих концах, отделенная от основной части цветовой полосы.

Язык кода:javascript
копировать
import numpy asnp                                                                  
import xarray asxr                                                        
importmatplotlib.pyplot as plt                                                  
importmatplotlib.path as mpath                                               
importmatplotlib as mpl                                                       
from matplotlibimport cm,colors                                              
from matplotlib.patchesimport Rectangle                                      
importcartopy.crs as ccrs                                                   
fromcartopy.util import add_cyclic_point                                       
fromcartopy.mpl.gridliner import LONGITUDE_FORMATTER,               
LATITUDE_FORMATTER                  
importcartopy.feature as cf                                                   
importcartopy.io.shapereader as shpreader                                         
plt.rcParams['font.sans-serif']=['SimHei']                                     
file=r'E:\aaaa\datanc\2019.6.23\fnl_20190620_00_00.grib2'                    
data=xr.open_dataset(file,engine='cfgrib',                                 
backend_kwargs={'filter_by_keys':{'typeOfLevel': 'surface'}})
t=data['t']-278.15                                                            
lat=data['latitude']                                                               
lon=data['longitude']                                                             
proj=ccrs.LambertConformal(central_longitude=105,central_latitude=35)    
reader= shpreader.Reader( r'F:\B\china.shp')                                           
provinces=cf.ShapelyFeature(reader.geometries(),                              
crs=ccrs.PlateCarree(),                       
edgecolor='k',                                 
facecolor='none',                                
alpha=1,lw=0.5)                            
extent=[80,130,10,60]                                                      
fig=plt.figure(figsize=(1.5,1.5),dpi=800)                                      
ax=fig.add_axes([0,0.1,1,0.85],projection=proj)                               
ax.add_feature(cf.COASTLINE.with_scale('50m'),lw=0.25)                    
ax.add_feature(cf.OCEAN.with_scale('50m'),lw=0.5)                           
ax.add_feature(cf.LAND.with_scale('50m'),lw=0.5,edgecolor='none')         
ax.add_feature(cf.RIVERS.with_scale('50m'),lw=0.25)                        
ax.add_feature(provinces,linewidth=0.3)                                       
ax.add_geometries(shpreader.Reader(r'F:\B\nine.shp').geometries(),          
                  crs=ccrs.PlateCarree(),edgecolor='k',                     
facecolor='k',alpha=1,lw=0.5)                          
ax.spines['geo'].set_linewidth(0.25)                                           
ax.set_extent(extent)                                                       
ax2=fig.add_axes([0.054,0,0.892,0.1])                                          
ax2.tick_params(axis='both',which='major',                                    
direction='in',width=0.5,                                      
length=0.5,labelsize=3)                                 
for i in ['top','bottom','left','right']:                                              
    ax2.spines[i].set_linewidth(0.5)                                           
ac=ax.contourf(lon,lat,t,cmap='Spectral_r',                                  
levels=np.arange(-20,40,2),                             
transform=ccrs.PlateCarree())                            
ax.spines['geo'].set_linewidth(0.5)                                             
ax2.set(xlim=(-3,30),ylim=(0,1))                                            
num=ac.levels                                                                 
colormap=cm.get_cmap('Spectral_r',len(num)-1)                                  
cmaps=colormap(range(len(num)-1))                                          
camps=cmaps.tolist()                                                        
for i,x,y,colorin zip(range(len(num)-2),                                    
                      range(len(num)-2),                                          
                      [0.25]*(len(num)-2),                                      
                      cmaps[1:-1]):                                                
    rectangle=Rectangle([x,y],1,0.5,                                        
                       facecolor=color,                                          
                       alpha=1,                                                      
                       edgecolor='k',                                             
                       linewidth=0.02)                                               
    ax2.add_patch(rectangle)                                                       
left=plt.Polygon(xy=[[-0.75,0.31],[-0.75, 0.69], [-2.5,0.5]],            
facecolor=cmaps[0],edgecolor='k',linewidth=0.02)           
right=plt.Polygon(xy=[[27.75,0.31],[27.75,0.69],[29.5,0.5]],              
facecolor=cmaps[-1],edgecolor='k',linewidth=0.02)              
ax2.add_patch(left)                                                              
ax2.add_patch(right)                                                            
for s in['top','bottom','left','right']:                                                
    ax2.spines[s].set_linewidth(0.5)                                            
ax2.axis('off')

3. Цветовая полоса столбца с двойным масштабом

Сделайте на цветовой панели две галочки, чтобы отображать разные измерения.

Язык кода:javascript
копировать
import numpy asnp                                                            
importmatplotlib as mpl                                                         
importmatplotlib.pyplot as plt                                                  
importmatplotlib.colors as mcolors                                               
plt.rcParams['font.sans-serif']=['SimHei']                                  
##Первый шаг — создать цветную полосу осадков                                                       
fig=plt.figure(figsize=(1.5,0.2),dpi=500)                                        
ax=fig.add_axes([0,0,1,0.5])                                                 
colorlevel=[0.1,10.0,25.0,50.0,100.0,250.0,500.0]#Уровень осадков               
colordict=['#A6F28F','#3DBA3D','#61BBFF','#0000FF','#FA00FA','#800040']#Список цветов                                                                     
cmap=mcolors.ListedColormap(colordict)#Создать карту цветов                    
норма=mcolors.BoundaryNorm(colorlevel,cmap.N)#Сгенерировать индекс                       
fc=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=cmap),                
             cax=ax,orientation='horizontal',extend='both')                   
fc.ax.tick_params(which='major',labelsize=3,                                   
direction='out',width=0.5,length=1)                           
fc.outline.set_linewidth(0.3)                                                 
##Второй шаг: создание столбца с двойным масштабом##                                                      
ax2=fc.ax# Вызовите атрибут ax объекта fc и назовите его ax2. На данный момент ax2 рассматривается как подграф.            
ax2.xaxis.set_ticks_position('top')#Переместить числовую шкалу вверх                        
ax2.tick_params(labelsize=3,top=True,width=0.5,length=1)#Изменить образец тика          
формулу и поставить на ней шкалу                                                                   
ax3=ax2.secondary_xaxis('bottom')                                                                           
ax3.tick_params(labelsize=3,width=0.5,length=1)                              
ax3.spines['bottom'].set_bounds(0.1,500)#Усекаем лишнюю часть                         
ax3.set_xticks([40,120,210,290,380,460])                                   
ax3.set_xticklabels(['легкий дождь','умеренный дождь','сильный дождь','сильный дождь','сильный дождь','чрезвычайно сильный дождь'])                    
ax3.spines['bottom'].set_linewidth(0.3)#Изменить толщину нижней линии до толщины линии кадра

4. Столбец масштаба отделен от тела цветовой панели

При использовании достигается визуальный эффект отделения списка масштабов от основной части цветовой панели.

Язык кода:javascript
копировать
import numpy asnp                                                               
importmatplotlib as mpl                                                       
importmatplotlib.pyplot as plt                                             
importmatplotlib.colors as mcolors                                           
plt.rcParams['font.sans-serif']=['SimHei']                                  
##Первый шаг — создание цветных полос##                                                       
fig=plt.figure(figsize=(1.5,0.2),dpi=500)                                     
ax=fig.add_axes([0,0,1,0.5])                                                  
cmap =mpl.cm.cool                                                             
norm = mpl.colors.Normalize(vmin=5,vmax=10)                              
fc=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=cmap),           
             cax=ax, orientation='horizontal')                               
fc.ax.tick_params(which='major',labelsize=3,                                 
direction='out',width=0.5,length=1)                         
fc.outline.set_linewidth(0.3)                                                 
##Второй шаг: создание столбца с двойным масштабом##                                                     
ax2=fc.ax# Вызовите атрибут ax объекта fc и назовите его ax2. На данный момент ax2 рассматривается как подграф.              
ax2.xaxis.set_ticks_position('top')#Переместить числовую шкалу влево                           
ax2.tick_params(labelsize=3,top=True,width=0.5,length=1)                  
ax3=ax2. Secondary_xaxis('bottom')#Создайте ax3 так, чтобы ax3 был точно таким же, как ax2            
ax3.tick_params(labelsize=3,width=0.5,length=3)                              
ax3.spines['bottom'].set_bounds(5,10)#Усекаем лишнюю часть                         
ax3.set_xticks([5,10])                                                         
ax3.set_xticklabels(['0.1mm','500mm'])#Преобразуем количественные значения на ax3 в качественный текст     
ax3.spines['bottom'].set_linewidth(0.3)#Изменить толщину нижней линии до толщины линии кадра                    
labels=fc.ax.get_xticklabels()                                                    
ax2.axis('off')                                                                   
fc.outline.set_color('none')                                                      
ax3.spines['bottom'].set_position(('outward',10))

5. Используйте команду «Легенда», чтобы создать фальшивую цветовую полосу.

При рисовании изображений мы также можем использовать команду «Легенда» для создания смоделированной цветовой полосы, которая часто встречается в некоторых диаграммах осадков с прогнозами погоды и в справочниках числовых диапазонов. Если уровней меньше и известны все номера цветов, вы можете добавить легенду вручную, например:

Язык кода:javascript
копировать
larger1=mpatches.Rectangle((0,0), 1, 1, facecolor="#A6F28F")             
larger2=mpatches.Rectangle((0,0), 1, 1, facecolor="#3DBA3D")               
larger3=mpatches.Rectangle((0,0), 1, 1, facecolor="#61BBFF")              
larger4=mpatches.Rectangle((0,0), 1, 1, facecolor="#0000FF")               
larger5=mpatches.Rectangle((0,0), 1, 1, facecolor="#FA00FA")               
labels=['0-10','10-25','25-50','50-100','100-250']                              
ax.legend([larger1,larger2,larger3,larger4,larger5],labels,                     
               fontsize=12,frameon=False,                           
               title='Легенда (мм)',facecolor='none',                   
               loc='lower left', bbox_to_anchor=(-0.01,-0.02),                  
               fancybox=False)

Подробные параметры легенды приведены в главе «Основные команды рисования», обращайтесь друг к другу.

Если мы не знаем конкретный номер цвета каждого раздела, мы можем использовать метод цикла для добавления легенд, например:

Язык кода:javascript
копировать
cs=ax.contourf(cycle_LON,cycle_LAT, cycle_t,                                   
levels=np.arange(-60,60,10),cmap='RdBu_r',extend='both')                  
cmap=cm.get_cmap('RdBu_r',len(cs.levels)-1)                                 
color_list=(cmap(range(len(cs.levels)-1)))                                 
Rectangles=[ ]                                                                    
text=[ ]                                                                       
for l incs.levels[::-1]:                                                       
    text.append(f'{int(l-10)}~{int(l)}')                                          
for color incolor_list[::-1]:                                                   
    Rectangles.append(mpatches.Rectangle((0,0), 1, 1, facecolor=color)) 
ax.legend(handles=Rectangles,labels=text,loc='lowerright', fontsize=3,      
                             title='Температура',                                      
                              frameon=False,                                 
                              fancybox=False,                                
                              handletextpad=2,                                  
                              handlelength=3,                                 
                              handleheight=1.5,                                
                              title_fontsize=5,                                 
                              bbox_to_anchor=(1.25,0),                        
                              labelspacing=0.5)                           

Здесь используется непосредственное управление цветовой картой для создания новой легенды. Вы также можете использовать get_facecolor, чтобы получить цвет текущего контура:

6. Один числовой интервал соответствует обработке нескольких задач с цветом.

Эта проблема возникает, когда таблица сопоставления цветов используется неправильно. Есть две причины: 1. Неправильное использование правил сопоставления цветов. Например, правило нормализации используется в главах, посвященных настройке cmap и colorbar. необходимо, чтобы числовой интервал соответствовал нескольким цветам; во-вторых, длина массива цветов, хранящегося в карте цветов, меньше длины массива уровней. Последняя причина чаще всего возникает при использовании cmaps для внедрения cmap в NCL. Например:

Язык кода:javascript
копировать
pc1=ax1.contourf(olon,olat,rain_new,                  
                  levels=np.arange(0,500,           
                  cmap=cmaps.sunshine_9lev)                                     
pc2=ax2.contourf(olon,olat,rain_new,             
                  levels=np.array([0,50,100,250,300,500]),
                  cmap=cmaps.sunshine_9lev)

В настоящее время длина уровней может быть сокращена только до длины меньшего размера цветового массива, хранящегося в cmap. Цвета, хранящиеся на цветовой панели NCL, несовместимы. Например, sun_9lev, представленный выше, cmap хранит только 10 цветов, а установленные вами уровни достигают 100, тогда неизбежно произойдет несовпадение.

Цветовая карта Matplotlib в принципе не имеет такой ситуации, поскольку каждая cmap хранит 256 цветов.

Настраиваемая cmap и цветовая панель

В реальной визуализации данных cmap на самом деле представляет собой просто серию сохраненных массивов, представляющих цвета, которые не имеют реальной связи с числовыми значениями. Например, когда контурф рисует цветную контурную карту, пока параметр уровней изменяется, значение, представленное определенным цветом, будет меняться. Чтобы отразить это изменение, модуль цветов в matplotlib предоставляет нормализованные операторы для достижения нашей цели. . Читатели могут посетить официальный сайт, чтобы ознакомиться со всеми стандартизированными заявлениями. Здесь мы углубимся только в несколько часто используемых операторов класса.

1.LinearSegmentedColormap

Функция сегментации смешивания цветов. Эта команда может подготовить новую цветовую карту на основе списка цветов и сокращения значения N, введенного пользователем. Эта команда аналогична палитре в искусстве: она смешивает новые цвета с соседними цветами в исходном списке цветов. По мере изменения списка цветов и значения N новая созданная cmap также изменится. Как показано ниже, для создания новой cmap задаются два цвета «tab:red», «tab:blue» и разные значения N:

Язык кода:javascript
копировать
import matplotlib.colorsas mcolors                                            
color_list=['tab:red','tab:blue']                                             
new_cmap=mcolors.LinearSegmentedColormap.from_list('new_cmap',             
                                       color_list,N=2)                    
norm=mpl.colors.Normalize(vmin=5,vmax=10)                            
fc=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=new_cmap),         
                cax=ax, orientation='horizontal')

Здесь нам требуется только, чтобы вновь созданная cmap имела только два цвета, чтобы два цвета, которые мы вводим, выводились напрямую без настройки цвета. Когда мы изменяем N на 5, что соответствует количеству числовых интервалов:

Язык кода:javascript
копировать
new_cmap=mcolors.LinearSegmentedColormap.from_list('new_cmap',        
                                               color_list,N=5)

В это время в средней части цветовой панели ясно видно, что два цвета смешиваются для создания нового цвета. Изменяя исходный список цветов и значение N, мы можем развернуть больше цветовых карт, например:

Язык кода:javascript
копировать
color_list=['tab:red','tab:blue','tab:green','#000000']                             
new_cmap=mcolors.LinearSegmentedColormap.from_list('new_cmap',         
                color_list,50)                       
norm=mpl.colors.Normalize(vmin=5,vmax=10)                              
fc=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=new_cmap),      
                 cax=ax, orientation='horizontal')                                 

По умолчанию эта команда создает новое смешение цветов только между двумя соседними цветами.

2.ListedColormap

Функция объединения списка цветов. Эта команда может соединять только все цвета в списке цветов. Линии разделения цветов очевидны, и смешанных цветов не будет. Наиболее часто используемые из них — это настройка цветных полос метеорологических осадков и другие ситуации, требующие от пользователей настройки цветных полос.

Язык кода:javascript
копировать
colorlevel=[0.1,10.0,25.0,50.0,100.0,250.0,500.0]                                  
colorlist=['#A6F28F','#3DBA3D','#61BBFF',                                  
           '#0000FF','#FA00FA','#800040']                                    
cmap=mcolors.ListedColormap(colorlist)                                    
norm=mcolors.BoundaryNorm(colorlevel,cmap.N)                             
fc=fig.colorbar(mpl.cm.ScalarMappable(norm=norm,cmap=cmap),             
             cax=ax, orientation='horizontal')                                

3.norm

Как упоминалось ранее, нам нужно сформировать сопоставление между цветами и значениями. Это правило сопоставления в модуле цветов называется нормой. При обычном рисовании контура вводимые нами уровни называются нормой. Правила отображения в это время имеют наивысший приоритет. Использование параметра уровней закроет другие команды нормы. Это наиболее распространенная ситуация, которая обычно используется при использовании cmap по умолчанию. Конечно, при дальнейшем использовании в связи с особыми потребностями рисования нам потребуются и другие правила отображения.

Разработчики Matplotlib не универсализировали команду для установки уровней, поэтому эту удобную команду можно использовать только в контуре и контуре. Другие распространенные команды сопоставления цветов, такие как scatter и pcolormesh, использовать нельзя. Для ограничения диапазона можно установить только vmin и vmax верхней и нижней строк. На данный момент мы можем использовать норму для указания правил сопоставления между значениями и. цвета, например:

Язык кода:javascript
копировать
import numpy asnp                                                               
import pandas aspd                                                        
importmatplotlib.pyplot as plt                                                  
importmatplotlib.colors as mcolors                                            
importmatplotlib.ticker as mticker                                             
importcartopy.crs as ccrs                                                        
importcartopy.io.shapereader as shpreader                                   
importcartopy.mpl.ticker as cmt                                             
import cmaps                                                               
importmatplotlib as mpl                                                        
fromscipy.interpolate import Rbf                                             
plt.rcParams['font.sans-serif']=['FangSong']                                     
plt.rcParams['axes.unicode_minus']=False                                     
pro=ccrs.PlateCarree()                                                         
extent=[108.3,109.4,29.7,30.7]                                               
def create_map(ax,extent):                                                    
    ax.add_geometry(shpreader.Reader(r'E:\Личуань.shp').geometrys(),        
                      crs=ccrs.PlateCarree(),linewidth=0.5,                 
                      edgecolor='k',facecolor='none')                            
    ax.set_extent([108.3,109.35,29.7,30.7],crs=pro)                              
    ax.set_xticks(np.arange(extent[0],extent[1], 0.2))                             
    ax.set_yticks(np.arange(extent[2],extent[3]+0.2, 0.2))                       ax.tick_params(which='both',labelsize=4,top=True,                              
    ax.tick_params(which='both',labelsize=4,top=True,                              
                       right=True,width=0.5)   
    ax.xaxis.set_major_formatter(cmt.LongitudeFormatter())                   
    ax.yaxis.set_major_formatter(cmt.LatitudeFormatter())                   
    ax.grid(axis='both',which='major',linewidth=0.6,color='w',                      
                       alpha=0.45,linestyle='--',zorder=5)                           
    ax.spines['geo'].set_linewidth(0.5)                                            
    ax.minorticks_on()                                                            
fig=plt.figure(figsize=(5,4.2),dpi=700)                                        
ax1=plt.subplot(221,projection=pro,facecolor='#E8E6E7')                    
ax2=plt.subplot(222,projection=pro,facecolor='#E8E6E7')                       
ax3=plt.subplot(223,projection=pro,facecolor='#E8E6E7')                        
ax4=plt.subplot(224,projection=pro,facecolor='#E8E6E7')                          
for ax in [ax1,ax2,ax3,ax4]:                                                
    create_map(ax,extent)                                                    
filename=r'C:\Users\lenovo\Desktop\3.xlsx'                                      
df=pd.read_excel(filename)                                                    
lon=df['долгота']                                                                   
lat=df['широта']                                                                    
rain=df['rain']                                                                
as1=ax1.scatter(lon,lat,c=rain,s=24,cmap='plasma_r')                            
cb1=fig.colorbar(as1,ax=[ax1],shrink=0.9)                                    
ax1.set_title('разброс норм по умолчанию', размер шрифта = 7)                                       
cmap =mpl.cm.plasma_r                                                     
colorlevel=[0.1,10,25,50,100,200,250,500]                                       
norm=mcolors.BoundaryNorm(colorlevel,cmap.N)                               
as2=ax2.scatter(lon,lat,c=rain,s=24,cmap='plasma_r',norm=norm)                       
cb2=fig.colorbar(as2,ax=[ax2],shrink=0.9)                                
ax2.set_title('Укажите разброс нормы', fontsize=7)                                        
olon=np.linspace(108,111,110)                                              
olat=np.linspace(29,32,110)                                                   
olon,olat=np.meshgrid(olon,olat)                                               
func=Rbf(lon,lat,rain,function='linear')                                                
rain_new=func(olon,olat)                                                      
pc1=ax3.pcolormesh(olon,olat,rain_new,cmap='viridis_r')                    
cb3=fig.colorbar(pc1,ax=[ax3],shrink=0.9)                                  
ax3.set_title('pcolormesh нормы по умолчанию', размер шрифта=7)                                 
cmap2 =mpl.cm.viridis_r                                                                  
norm2=mcolors.BoundaryNorm(colorlevel,cmap2.N)                           
pc2=ax4.pcolormesh(olon,olat,rain_new,norm=norm2,cmap='viridis_r')                
cb4=fig.colorbar(pc2,ax=[ax4],shrink=0.9)                                      
ax4.set_title('pcolormesh указанной нормы',fontsize=7)                            
for cb in[cb1,cb2,cb3,cb4]:                                                        
    cb.ax.tick_params(length=2,labelsize=4)                                       

Сравнивая два изображения разброса нормы по умолчанию и изображения pcolormesh, мы видим, что из-за строгого линейного отображения связь между уровнями цвета и значениями серьезно ухудшается, особенно однотоновая область, соответствующая области с низким значением, занимает большая площадь формата изображения. Затем за счет указания новой нормы соответствующие отношения отображения между цветами и значениями улучшаются. Вот некоторые общие нормы:

3.1 Normalize

То есть норма по умолчанию, то есть все цвета располагаются равномерно, независимо от размера числового интервала. Между числовыми значениями нет четкой разделительной линии, например:

3.2 BoundaryNorm

Как следует из названия, цвета этой команды соответствуют числовым интервалам один к одному, с четкими разделительными линиями. Только один цвет соответствует числовому интервалу. Это наше общее использование, например:

3.3 CenteredNorm

Правило сопоставления центра асимметрии делает наше значение центра тупым, а значение центра по умолчанию равно 0, например:

Эта команда закомментирована в версии matplotlib3.4.2 и временно недоступна.

3.4 LogNorm

Соответствующие правила индексированных числовых значений можно найти в документации официального сайта.

3.5 PowerNorm

Правила отображения по степенному закону изменяют исходное соответствие «Нормализация», изменяя значение гаммы. После изменения числовой интервал все еще может содержать несколько цветов, но эффект немного лучше, чем исходное значение по умолчанию, например:

3.6 TwoSlopeNorm

Эта команда приводит к тому, что цветные полосы имеют одинаковый масштаб вокруг центра. Если цветные полосы объединены, положением значения, заданного vcenter, является положение соединения, например:

В предыдущих двух цветных полосах, когда установлено vcenter=300, соединение между двумя цветными полосами привязывается к 300, когда установлено vcenter=0, соединение между двумя цветными полосами привязывается к 0;

Судя по этой особенности, у нас есть особое применение при отрисовке цветовой карты, аналогичное клепке значения 0, например:

При использовании цветовой шкалы на рисунке 3 выше нам нужно сделать красный и синий цвета Инь и Ян симметричными относительно значения 0, но мы можем обнаружить, что синие назначения на самом деле находятся в диапазоне от 0 до -0,5, а темный цвет находится в диапазоне от 0 до -0,5. синяя часть фактически не используется. В это время, если вы просто измените диапазоны vmin и vmax, как показано на рисунке 1, шкала 0 попадет в синюю область, а красный, синий, а также цвета инь и ян больше не будут симметричны относительно значения 0. Если используется TwoSlopeNorm, значение 0 можно установить в качестве центрального значения, как показано на рисунке 2:

Язык кода:javascript
копировать
Reds=mpl.cm.get_cmap('Reds')                                                    
Blues_r=mpl.cm.get_cmap('Blues_r')                                           
Redslist=Reds(np.linspace(0,1, 256))                                              
Bluerlist=Blues_r(np.linspace(0.25,1,256))                                   
new_list=np.vstack((Bluerlist,Redslist))                                      
ncmap=mcolors.LinearSegmentedColormap(colors=new_list,                    
                                      name='newcmap')                    
norm=mcolors.TwoSlopeNorm(vmin=-0.5,vcenter=0,vmax=1)             

3.7 FuncNorm

Пользовательские функции для отображения цветов. Подробную информацию можно найти в официальной документации сайта. Эта команда закомментирована в matplotlib3.4.2 и временно недоступна.


boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.