نقشهٔ استانها (IranMap)
نقشهٔ رنگی سبک 31 استان ایران با طیف ترتیبی سیستم طراحی، راهنمای رنگ، tooltip، فیلتر با کلیک و جدول جایگزین برای صفحهخوان
معرفی
IranMap نقشهٔ رنگی (choropleth) 31 استان ایران است: یک SVG درونخطی با مرزهای سادهشده، بدون هیچ کتابخانهٔ نقشه.
هر استان با طیف ترتیبی سیستم طراحی (--seq-1 تا --seq-7) و نسبت مقدارش به بیشترین مقدار رنگ میگیرد؛ استانی که
داده ندارد «بدون داده» است. داده همان مدل IranProvinceHeat است، پس یک داده
هر دو نما را میسازد.
چه زمانی استفاده کنیم:
- وقتی الگوی جغرافیایی خودش پیام است: همسایگی استانها، تمرکز در یک منطقه، تفاوت شمال و جنوب
- فیلتر صفحه با کلیک روی یک استان (
onProvinceClickوselected) - کنار
IranProvinceHeatیا یک جدول، وقتی هم «کجا» مهم است و هم «چقدر»
چه زمانی استفاده نکنیم:
- وقتی مقایسهٔ دقیق مقدارها مهم است: چشم مساحت را هم میخواند و استان بزرگ پررنگتر به نظر میرسد؛
IranProvinceHeatمرتبشده بهتر است - وقتی جای کم است (کارت کوچک، ستون جدول): استانهای کوچک (قم، البرز، تهران) دیگر دیده نمیشوند
- دادهای که مثبت و منفی دارد (تغییر نسبت به دورهٔ قبل): این طیف ترتیبی است، نه واگرا
| استان | مقدار |
|---|---|
| تهران | 4,820 نظر |
| اصفهان | 2,140 نظر |
| خراسان رضوی | 1,965 نظر |
| فارس | 1,480 نظر |
| خوزستان | 1,180 نظر |
| آذربایجان شرقی | 1,040 نظر |
| مازندران | 860 نظر |
| گیلان | 610 نظر |
| کرمان | 540 نظر |
| یزد | 320 نظر |
| هرمزگان | 210 نظر |
| آذربایجان غربی | بدون داده |
| اردبیل | بدون داده |
| البرز | بدون داده |
| ایلام | بدون داده |
| بوشهر | بدون داده |
| چهارمحال و بختیاری | بدون داده |
| خراسان جنوبی | بدون داده |
| خراسان شمالی | بدون داده |
| زنجان | بدون داده |
| سمنان | بدون داده |
| سیستان و بلوچستان | بدون داده |
| قزوین | بدون داده |
| قم | بدون داده |
| کردستان | بدون داده |
| کرمانشاه | بدون داده |
| کهگیلویه و بویراحمد | بدون داده |
| گلستان | بدون داده |
| لرستان | بدون داده |
| مرکزی | بدون داده |
| همدان | بدون داده |
استفاده
import { IranMap } from '@partodata/ui/iran-map'
export function ProvinceMentionsCard() {
const [province, setProvince] = React.useState<string>()
return (
<IranMap
data={{ tehran: 4820, isfahan: 2140, 'razavi-khorasan': 1965 }}
valueSuffix=" نظر"
label="نظرها به تفکیک استان"
selected={province}
onProvinceClick={(p) => setProvince((current) => (current === p.slug ? undefined : p.slug))}
/>
)
}IranMap فقط از زیرمسیر @partodata/ui/iran-map وارد میشود تا مرزهای استانها (حدود 12 کیلوبایت) به بستهٔ اصلی
اضافه نشوند. data مثل IranProvinceHeat یک Record<string, number> یا آرایهٔ { code, value }[] است؛ کد، slug
انگلیسی (tehran) یا کد ISO 3166-2:IR (IR-07) است و کد ناشناس نادیده گرفته میشود.
حالتها و انواع
رنگ و راهنما
مقدارها به هفت پلهٔ طیف ترتیبی (--seq-1 کمترین، --seq-7 بیشترین) تقسیم میشوند؛ این توکنها در تم تاریک و روشن
هر کدام ترتیب تأکید را حفظ میکنند، پس نقشه بدون هیچ تنظیمی در هر دو تم درست است. راهنمای رنگ زیر نقشه کمترین و
بیشترین مقدار و نشان «بدون داده» را دارد (showLegend={false} آن را برمیدارد، مثلاً وقتی راهنما در کارت دیگری است).
استانهای بدون داده با سطح خنثی و مرز مشخص در هر دو تم دیده میشوند؛ حتی اگر مجموعهٔ داده خالی باشد، شکل هر 31 استان حفظ میشود. نشان «بدون داده» در راهنما همین رنگ را دارد. مقدار اندازهگیریشدهٔ صفر، دادهٔ معتبر است و با پلهٔ نخست طیف ترتیبی نمایش داده میشود؛ آن را برای نبود داده جایگزین نکنید.
فیلتر با کلیک
با onProvinceClick هر استان یک دکمهٔ تغییر وضعیت میشود: کلیک، Enter یا Space آن را گزارش میکند و استانهای
selected با aria-pressed و خط دور پررنگ نشان داده میشوند. نقشه خودش چیزی را انتخاب نمیکند؛ صفحه انتخاب را
نگه میدارد (معمولاً در فیلترهای URL) و به selected برمیگرداند. callback شیء { slug, iso, label, value }
میگیرد.
دسترسیپذیری
- کل نقشه یک توقف Tab است: فوکوس روی استان انتخابشده (یا پرمقدارترین) مینشیند و کلیدهای جهت، Home و End بین استانها جابهجا میشوند، به همان ترتیب جدول.
- هر استان نامی مثل «تهران: 4,820 نظر» دارد و tooltip با اشارهگر و با فوکوس صفحهکلید هر دو باز میشود (Escape آن را میبندد).
- یک جدول پنهان (
sr-only) با عنوانlabelهمهٔ 31 استان و مقدارشان را دارد، برای صفحهخوانی که نقشه را نمیبیند. - رنگ تنها حامل مقدار نیست: مقدار در نام، tooltip و جدول هم هست.
راهنمای استفاده
بکنید
- یک
labelروشن بدهید؛ هم نام نقشه است و هم عنوان جدول جایگزین. - واحد را باvalueSuffixبگویید (" نظر"،"٪"). - برای رتبهبندی دقیق،
IranProvinceHeatرا کنار نقشه بگذارید.
نکنید
- رنگها را با style عوض نکنید؛ از توکنهای طیف میآیند و با تم تطبیق مییابند. - مقدار منفی ندهید؛ طیف از صفر تا
بیشترین مقدار است. - نقشه را برای انتخاب چند استان در فرم به کار نبرید؛ آن کار
RegionPickerاست.
Props
کامپوننتهای مرتبط
IranProvinceHeat— همان داده، به شکل فهرست مرتب با نوار مقدارRegionPicker— انتخاب استان در فرم و فیلتر
نمودار نبض مفهوم (ConceptPulseChart)
نمودار scatter دامنهای افکارسنجی — هر نقطه یک «مفهوم» با حلقه ترکیب جریان/احساس دور آن، نمایشدهنده اینکه «این مفهوم از چه ساخته شده».
نقشهحرارتی استانها (IranProvinceHeat)
لیست عمودی 31 استان ایران با heat-bar متناسب با مقدار — توزیع جغرافیایی نظرات، شکایات، احساسات و معیارهای دیگر