سفارشیسازی محورهاِ نمودار در ارائهها با استفاده از C++
نمای کلی
این مقاله توضیح میدهد که چگونه محورهای نمودار را با Aspose.Slides for C++ سفارشی کنید. این مقاله شامل مقادیر محاسبهشده محور، جابجایی سطرها و ستونهای نمودار، نمایش محور، فواصل برچسبهای دسته و علامتگذاریها، دستهبندیهای تاریخ و قالببندی، چرخش عنوان، مکانگذاری محور و واحدهای نمایش است.
دریافت حداکثر مقادیر در محور عمودی نمودارها
یک Presentation ایجاد کنید و یک نمودار مساحتی با دادههای پیشفرض اضافه کنید. قبل از خواندن مقادیر محاسبهشده محور، ValidateChartLayout را فراخوانی کنید تا طرحبندی نمودار بهروز باشد.
برای محدودیتهای محور، get_ActualMaxValue و get_ActualMinValue را بخوانید و برای فواصل علامتگذاریها، get_ActualMajorUnit و get_ActualMinorUnit را بخوانید. get_ActualMajorUnitScale و get_ActualMinorUnitScale مقیاسهای واحد زمان را ارائه میدهند که برای محورهاهای تاریخ مربوط هستند. مثال این مقادیر را در متغیرهای محلی ذخیره میکند و نمودار را ذخیره مینماید.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Area, 100, 100, 500, 350);
chart->ValidateChartLayout();
auto maxValue = chart->get_Axes()->get_VerticalAxis()->get_ActualMaxValue();
auto minValue = chart->get_Axes()->get_VerticalAxis()->get_ActualMinValue();
auto majorUnit = chart->get_Axes()->get_VerticalAxis()->get_ActualMajorUnit();
auto minorUnit = chart->get_Axes()->get_VerticalAxis()->get_ActualMinorUnit();
auto majorUnitScale = chart->get_Axes()->get_VerticalAxis()->get_ActualMajorUnitScale();
auto minorUnitScale = chart->get_Axes()->get_VerticalAxis()->get_ActualMinorUnitScale();
presentation->Save(u"AxisValues_out.pptx", SaveFormat::Pptx);
جابهجایی دادهها بین محورها
از SwitchRowColumn برای تعویض نقش سریها و دستهها در دادههای نمودار استفاده کنید. هر دسته قبلی تبدیل به یک سری میشود و هر سری قبلی تبدیل به یک دسته. این تغییر نحوه گروهبندی دادهها را تغییر میدهد؛ محورهای افقی و عمودی را جابجا نمیکند. مثال از SetRange برای بستن دادههای پیشفرض به Sheet1!A1:D5 استفاده میکند که شامل سطر سرآیند و ستون دسته است، قبل از جابجایی سطرها و ستونها. سپس نموداری با چهار سری و سه دسته ذخیره میکند.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 100, 100, 400, 300);
chart->get_ChartData()->SetRange(u"Sheet1!A1:D5");
chart->get_ChartData()->SwitchRowColumn();
presentation->Save(u"SwitchChartRowColumns_out.pptx", SaveFormat::Pptx);
غیرفعالسازی محور عمودی برای نمودارهای خطی
از set_IsVisible با مقدار false برای محور عمودی استفاده کنید تا آن را مخفی کنید. مثال یک نمودار خطی با دادههای پیشفرض ایجاد میکند و آن را با مخفی شدن محور عمودی ذخیره مینماید.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 100, 100, 400, 300);
chart->get_Axes()->get_VerticalAxis()->set_IsVisible(false);
presentation->Save(u"HiddenVerticalAxis.pptx", SaveFormat::Pptx);
غیرفعالسازی محور افقی برای نمودارهای خطی
از set_IsVisible با مقدار false برای محور افقی استفاده کنید تا آن را مخفی کنید. مثال یک نمودار خطی با دادههای پیشفرض ایجاد میکند و آن را با مخفی شدن محور افقی ذخیره مینماید.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 100, 100, 400, 300);
chart->get_Axes()->get_HorizontalAxis()->set_IsVisible(false);
presentation->Save(u"HiddenHorizontalAxis.pptx", SaveFormat::Pptx);
تغییر محور دستهای
از set_CategoryAxisType برای انتخاب یک محور دستهای تاریخ یا متن استفاده کنید. این مثال به ExistingChart.pptx نیاز دارد که شامل یک نمودار بهعنوان اولین شکل در اولین اسلاید است و سلولهای دسته شامل مقادیر تاریخ عددی اکسل میباشند. محور افقی را به محور تاریخ تغییر میدهد. فراخوانی set_IsAutomaticMajorUnit با مقدار false، set_MajorUnit با مقدار 1 و set_MajorUnitScale با ماهها، علامتگذاریهای عمده را در فواصل یکماهه قرار میدهد.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/TimeUnitType.h>
#include <system/object_ext.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>(u"ExistingChart.pptx");
auto slide = presentation->get_Slide(0);
auto chart = System::ExplicitCast<IChart>(slide->get_Shape(0));
chart->get_Axes()->get_HorizontalAxis()->set_CategoryAxisType(CategoryAxisType::Date);
chart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticMajorUnit(false);
chart->get_Axes()->get_HorizontalAxis()->set_MajorUnit(1);
chart->get_Axes()->get_HorizontalAxis()->set_MajorUnitScale(TimeUnitType::Months);
presentation->Save(u"ChangeChartCategoryAxis_out.pptx", SaveFormat::Pptx);
کنترل فواصل برچسبهای محور دستهای
وقتی یک نمودار دارای دستههای بسیاری باشد، میتوانید تعداد برچسبهای قابل مشاهده محور را بدون حذف دستهها یا نقاط داده کاهش دهید. از set_IsAutomaticTickLabelSpacing با مقدار false استفاده کنید، سپس با set_TickLabelSpacing فاصله دسته دلخواه را تنظیم کنید. برای دستههای متنی به ترتیب عادی، شمارش از اولین دسته آغاز میشود:
| Interval | Labels displayed in the example |
|---|---|
1 |
دسته 1، دسته 2، دسته 3، … دسته 24 |
2 |
دسته 1، دسته 3، دسته 5، … دسته 23 |
3 |
دسته 1، دسته 4، دسته 7، … دسته 22 |
فاصله 3 هر برچسب سوم را نمایش میدهد و دو برچسب بین برچسبهای نمایش داده شده مخفی میمانند. این کار ستونهای مربوطه را حذف نمیکند. فاصلهگذاری خودکار یک فاصله را بر اساس فضای موجود انتخاب میکند؛ لزوماً همه برچسبها را نمایش نمیدهد.
علامتگذاریها کنترلهای جداگانهای دارند. از set_IsAutomaticTickMarksSpacing با مقدار false استفاده کنید و با set_TickMarksSpacing فاصله آنها را تنظیم کنید. بهعنوان مثال، 1 یک علامتگذاری را در هر فاصلهٔ دسته حفظ میکند در حالی که برچسبها فقط هر دستهٔ سوم نمایش داده میشوند. از set_MajorTickMark با سبک قابل مشاهده استفاده کنید تا نتیجه را ببینید. بازگرداندن هر یک از ویژگیهای فاصلهگذاری خودکار به true به نمودار اجازه میدهد تا دوباره آن فاصله را انتخاب کند.
مثال خودمستقلی زیر ۲۴ دسته و یک سری ایجاد میکند، سپس سه اسلاید را در CategoryAxisIntervals.pptx ذخیره مینماید: فاصلهگذاری خودکار، فاصلهگذاری دستی برچسبها با علامتگذاریهای مستقل، و بازگرداندن فاصلهگذاری خودکار. دو نسخهٔ کپی دادههای اصلی نمودار را حفظ میکنند. ارائه ورودی لازم نیست. متن برچسب افقی فرق چگالی را بهراحتی نشان میدهد.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/TickMarkType.h>
#include <DOM/Chart/IChartTextFormat.h>
#include <DOM/Chart/IChartTextBlockFormat.h>
#include <DOM/Chart/IChartPortionFormat.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartDataCell.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <system/object_ext.h>
#include <DOM/ISlideCollection.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 30, 40, 660, 320);
chart->set_HasLegend(false);
chart->get_ChartData()->get_Categories()->Clear();
chart->get_ChartData()->get_Series()->Clear();
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
workbook->Clear(0);
auto series = chart->get_ChartData()->get_Series()->Add(ChartType::ClusteredColumn);
for (auto i = 0; i < 24; i++)
{
auto categoryName = System::String::Format(u"Category {0}", i + 1);
auto categoryCell = workbook->GetCell(0, i + 1, 0, System::ObjectExt::Box(categoryName));
chart->get_ChartData()->get_Categories()->Add(categoryCell);
auto valueCell = workbook->GetCell(0, i + 1, 1, System::ObjectExt::Box(10 + i % 6 * 5));
series->get_DataPoints()->AddDataPointForBarSeries(valueCell);
}
auto axis = chart->get_Axes()->get_HorizontalAxis();
axis->set_CategoryAxisType(CategoryAxisType::Text);
axis->get_TextFormat()->get_TextBlockFormat()->set_RotationAngle(0);
axis->get_TextFormat()->get_PortionFormat()->set_FontHeight(12);
axis->set_MajorTickMark(TickMarkType::Outside);
axis->set_IsAutomaticTickLabelSpacing(true);
axis->set_IsAutomaticTickMarksSpacing(true);
// اسلاید 2: هر برچسب سوم را نشان دهید، اما علامتگذاری برای هر دسته حفظ شود.
auto manualSlide = presentation->get_Slides()->AddClone(slide);
auto manualChart = System::ExplicitCast<IChart>(manualSlide->get_Shape(0));
auto manualAxis = manualChart->get_Axes()->get_HorizontalAxis();
manualAxis->set_IsAutomaticTickLabelSpacing(false);
manualAxis->set_TickLabelSpacing(3);
manualAxis->set_IsAutomaticTickMarksSpacing(false);
manualAxis->set_TickMarksSpacing(1);
// اسلاید 3: بگذارید نمودار دوباره هر دو فاصله را انتخاب کند.
auto restoredSlide = presentation->get_Slides()->AddClone(manualSlide);
auto restoredChart = System::ExplicitCast<IChart>(restoredSlide->get_Shape(0));
restoredChart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticTickLabelSpacing(true);
restoredChart->get_Axes()->get_HorizontalAxis()->set_IsAutomaticTickMarksSpacing(true);
presentation->Save(u"CategoryAxisIntervals.pptx", SaveFormat::Pptx);
فاصلهگذاری خودکار (اسلاید 1): در این نمایش، هر برچسب دوم دسته نمایش داده میشود و به دو خط میپیچد. نتیجهٔ خودکار میتواند بسته به اندازه نمودار، قلمها و رندرر متفاوت باشد.

فاصلهگذاری دستی (اسلاید 2): هر برچسب سوم در یک خط نمایش داده میشود، در حالی که علامتگذاریها در هر فاصلهٔ دسته باقی میمانند. تمام ۲۴ ستون، از جمله ستونهای بدون برچسب، با همان مقادیر قابل مشاهده هستند. اسلاید ۳ ظاهر خودکار نشان دادهشده در بالا را بازمیگرداند.

انتخاب محور و فاصلهٔ صحیح
از این فاصلهٔ شمارش دسته برای محور دستهای متنی استفاده کنید، مانند محور دستهای یک نمودار ستونی، خطی، مساحتی یا میلهای. در یک نمودار ستونی، این محور افقی است. در یک نمودار میلهای افقی، محور دستهای عمودی است، بنابراین این تنظیمات را بر روی get_VerticalAxis اعمال کنید. فاصلهگذاری علامتگذاریها نیز در محوری سری در نمودارهایی که داشته باشند، اعمال میشود.
از فاصلهگذاری برچسبهای دسته برای تنظیم مقیاس عددی یک محور مقدار استفاده نکنید. در یک محور مقدار، set_MajorUnit یک تفاوت مقدار را تعیین میکند: بهعنوان مثال، واحد عمدهٔ 10 علامتگذاریهایی در 0، 10، 20 و … ایجاد میکند زمانی که محور از صفر آغاز شود. یک فاصلهٔ برچسب دستهای 3 بهجای آن موقعیتهای دستهای را میشمارد، بدون توجه به مقادیر دادهای آنها. نمودارهای پراکندگی و حبابی از محورهاهای مقدار استفاده میکنند نه از محور دستهای متنی. برای یک محور تاریخ، از واحدهای عمدهٔ مبتنی بر زمان و مقیاسها همانطور که در تغییر محور دستهای توضیح داده شده است، استفاده کنید.
تنظیم قالب تاریخ برای مقادیر محور دستهای
مثال دادههای پیشفرض نمودار را با چهار مقدار سالانه جایگزین میکند. تاریخها بهعنوان شمارههای سریال OLE Automation در اولین کاربرگ (شاخص 0) ذخیره میشوند. از set_CategoryAxisType برای انتخاب یک محور تاریخ استفاده کنید، قالببندی مرتبط با منبع را با set_IsNumberFormatLinkedToSource غیرفعال کنید و yyyy را با set_NumberFormat تخصیص دهید تا برچسبهای دسته سالهای چهاررقمی را بهطور مستقل از قالببندی سلولها نمایش دهند.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartData.h>
#include <DOM/Chart/CategoryAxisType.h>
#include <DOM/Chart/IChartDataWorkbook.h>
#include <DOM/Chart/IChartDataCell.h>
#include <DOM/Chart/IChartCategoryCollection.h>
#include <DOM/Chart/IChartSeriesCollection.h>
#include <DOM/Chart/IChartSeries.h>
#include <DOM/Chart/IChartDataPointCollection.h>
#include <system/object_ext.h>
#include <system/date_time.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::Line, 50, 50, 450, 300);
chart->get_ChartData()->get_Categories()->Clear();
chart->get_ChartData()->get_Series()->Clear();
auto workbook = chart->get_ChartData()->get_ChartDataWorkbook();
workbook->Clear(0);
auto series = chart->get_ChartData()->get_Series()->Add(ChartType::Line);
for (auto i = 0; i < 4; i++)
{
auto date = System::DateTime(2015 + i, 1, 1);
auto categoryCell = workbook->GetCell(0, i + 1, 0, System::ObjectExt::Box(date.ToOADate()));
chart->get_ChartData()->get_Categories()->Add(categoryCell);
auto valueCell = workbook->GetCell(0, i + 1, 1, System::ObjectExt::Box(i + 1));
series->get_DataPoints()->AddDataPointForLineSeries(valueCell);
}
chart->get_Axes()->get_HorizontalAxis()->set_CategoryAxisType(CategoryAxisType::Date);
chart->get_Axes()->get_HorizontalAxis()->set_IsNumberFormatLinkedToSource(false);
chart->get_Axes()->get_HorizontalAxis()->set_NumberFormat(u"yyyy");
presentation->Save(u"DateAxisFormat.pptx", SaveFormat::Pptx);
تنظیم زاویهٔ چرخش برای عنوان محور نمودار
عنوان محور عمودی را با set_HasTitle فعال کنید، متن عنوان را فراهم کنید و با set_RotationAngle عنوان را چرخانید. زاویه بر حسب درجه اندازهگیری میشود؛ این مثال یک نمودار ستونی را که عنوان محور مقدار آن بهصورت 90 درجه چرخیده ذخیره میکند.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/IChartTextFormat.h>
#include <DOM/Chart/IChartTextBlockFormat.h>
#include <DOM/Chart/IChartTitle.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_VerticalAxis()->set_HasTitle(true);
chart->get_Axes()->get_VerticalAxis()->get_Title()->AddTextFrameForOverriding(u"Value");
chart->get_Axes()->get_VerticalAxis()->get_Title()->get_TextFormat()->get_TextBlockFormat()->set_RotationAngle(90);
presentation->Save(u"RotatedAxisTitle.pptx", SaveFormat::Pptx);
تنظیم موقعیت محور بر روی محور دستهای یا مقدار
از set_AxisBetweenCategories برای کنترل اینکه آیا محور مقدار در بین دستهها یا در علامتگذاریهای دسته محور عبور کند، استفاده کنید. این ویژگی به محورهاهای دستهای اعمال میشود. مثال این مقدار را روی true برای محور دستهای افقی یک نمودار ستونی تنظیم میکند و نتیجه را ذخیره مینماید.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_HorizontalAxis()->set_AxisBetweenCategories(true);
presentation->Save(u"AxisBetweenCategories.pptx", SaveFormat::Pptx);
تنظیم واحد نمایش بر روی محور مقدار نمودار
از set_DisplayUnit برای مقیاسبندی برچسبهای یک محور مقدار بدون تغییر دادههای زیرین استفاده کنید. با تنظیم DisplayUnitType بر روی Millions، مقدار 60,000,000 به صورت 60 نمایش داده میشود. مثال یک نمودار ستونی ایجاد میکند و واحد نمایش میلیونها را بر روی محور عمودی آن اعمال مینماید.
#include <DOM/Presentation.h>
#include <DOM/ISlide.h>
#include <DOM/IShapeCollection.h>
#include <DOM/IChart.h>
#include <DOM/Chart/ChartType.h>
#include <DOM/Chart/IAxesManager.h>
#include <DOM/Chart/IAxis.h>
#include <Export/SaveFormat.h>
#include <DOM/Chart/DisplayUnitType.h>
using namespace Aspose::Slides;
using namespace Aspose::Slides::Charts;
using namespace Aspose::Slides::Export;
auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto chart = slide->get_Shapes()->AddChart(ChartType::ClusteredColumn, 50, 50, 450, 300);
chart->get_Axes()->get_VerticalAxis()->set_DisplayUnit(DisplayUnitType::Millions);
presentation->Save(u"Result.pptx", SaveFormat::Pptx);
سؤالات متداول
چگونه مقدار تقاطع یک محور با محور دیگر (تقاطع محور) را تنظیم کنم؟
از set_CrossType برای انتخاب رفتار تقاطع استفاده کنید. برای تعیین مقدار عددی تقاطع، از set_CrossAt استفاده کنید. این تنظیمات به شما امکان میدهند تقاطع محور را به یک پایه مناسب جابهجا کنید.
چگونه میتوانم برچسبهای علامتگذاری را نسبت به محور موقعیتدهی کنم؟
از set_TickLabelPosition با یکی از مقادیر TickLabelPositionType: Low، High، NextTo یا None استفاده کنید. برای کنترل خود علامتگذاریها، از set_MajorTickMark یا set_MinorTickMark استفاده کنید؛ اینها جدا از موقعیتگذاری برچسبها هستند.